All'interno di un metodo non statico non statico, se si usano solo alcuni membri non statici, dovrei convertirlo in metodi statici con parametri?

0

Secondo Ci sono linee guida su quanti parametri una funzione dovrebbe accettare? , è ok se un metodo ha pochi parametri.

Secondo link , se un metodo non statico non si basa su membri non statici, è preferibile essere statico.

E il caso che un metodo usi solo alcuni membri non statici? Ad esempio:

public class MyClass{
    private String userId;
    private String name;
    .
    .
    .
    public void callSomeAPI(){
        .
        .
        .
        String url=...+this.userId+...;
        //other code

    }
}

callSomeAPI () non ha bisogno di sovrascrivere, ma non può essere statico al momento solo perché ha bisogno di

this.userId 

solo. Quindi la mia domanda è, vale la pena convertire i membri non statici in parametri, cioè:

public void callSomeAPI(String userId){
    .
    .
    .
    String url=...+userId+...;
    //other code
}

se ha bisogno solo di pochi membri non statici?

    
posta mmmaaa 26.04.2018 - 04:04
fonte

2 risposte

1

TL; DR: sì, ma per metodi privati.

Come dice il tuo secondo link, mantieni il campo di applicazione di tutte le variabili il più stretto possibile. Quindi, se puoi limitare un metodo solo ai parametri, piuttosto che ai campi, allora fallo ... con l'avvertenza dettagliata dalla tua prima citazione che il numero di parametri dovrebbe essere mantenuto il più piccolo possibile per evitare che le chiamate a quel metodo diventino ingombranti .

Quindi è un trade off come spesso sono queste cose. Se il metodo ha solo la necessità di accedere a uno o due campi, farei in modo che sia statico e li passi come parametri. Se ha bisogno di accedere a più, o se ha bisogno di modificare quei campi, tenerlo come un metodo di istanza.

Tuttavia, per ripetere la mia prima affermazione, tale trasformazione in un metodo statico ha senso per i metodi privati. Se lo hai fatto con un metodo pubblico, allora devi considerare il tiro che quei campi giocano nella tua classe.

  1. Se vengono semplicemente passati tramite il costruttore, in modo che siano disponibili per i metodi di istanza, l'intera classe diventa un candidato per diventare statica (a condizione che i metodi non abbiano effetti collaterali globali).
  2. Se hanno stato creato o mutato dall'istanza, probabilmente hanno senso rimanere come metodi di istanza. Altrimenti rischi di finire con lo stato globale, che non è mai un buon posto, o avresti bisogno di esporre pubblicamente quei campi, rovinando l'incapsulamento.
risposta data 26.04.2018 - 07:07
fonte
0

Assolutamente no. getUserInfo restituisce una proprietà di tale oggetto, ecco perché è un metodo di istanza. Trasformarlo in un metodo statico con il nome passato è completamente arretrato. E user.id è un metodo privato, quindi puoi chiamarlo solo dai metodi all'interno della classe. Non farlo

    
risposta data 26.04.2018 - 08:32
fonte

Leggi altre domande sui tag