Perché i metodi statici privati?

62

Volevo solo chiarire una domanda che ho. Qual è il punto di avere un metodo statico privato rispetto a un metodo normale con visibilità privata?

Avrei pensato che un vantaggio per avere un metodo statico è che può essere chiamato senza un'istanza di una classe, ma dal momento che è privato c'è persino un punto in cui è statico?

L'unica ragione per cui posso pensare è che aiuta a comprendere concettualmente il metodo a livello di classe anziché a livello di oggetto.

    
posta Rehan Naqvi 01.04.2014 - 16:11
fonte

7 risposte

65

La caratteristica di essere statici è indipendente dalla visibilità.

I motivi per cui vorrete avere un metodo statico (alcuni codici che non dipendono da membri non statici) saranno comunque utili. Ma forse non vuoi che nessuno / qualcos'altro lo usi, solo la tua classe.

    
risposta data 01.04.2014 - 16:20
fonte
26

Un motivo abbastanza comune (in Java) potrebbe essere quello di inizializzare variabili di campo immutabili in un costruttore utilizzando un semplice metodo private static per ridurre l'ingombro del costruttore.

  • È private : le classi esterne non dovrebbero vederlo.
  • È static : può eseguire qualche operazione, indipendente 1 dello stato della classe host.

Un esempio un po 'forzato segue ...

es:

public class MyClass{
    private final String concatenated;

    public MyClass(String a, String b){
        concatenated = concat(a,b);
    }

    public String getConcatenated(){
       return concatenated;
    }

    /**
    *  Concatenates two Strings as 's1---s2'
    **/
    private static final String concat(String s1, String s2){
        return String.format("%s---%s", s1, s2);
    }
}

1 Supponendo che non abbia alcuna interazione con altre variabili static .

    
risposta data 01.04.2014 - 17:14
fonte
12

Un caso d'uso comune per un metodo private static è un metodo di utilità che è

  1. usato solo da quella classe
  2. è indipendente dallo stato interno di quella classe
risposta data 01.04.2014 - 18:46
fonte
10

Si vede che hai poche righe di codice che si ripetono in molti dei tuoi metodi, quindi decidi di estrarle in un unico metodo, poiché il codice duplicato non è buono.

Rendi privato il metodo in quanto non è progettato per un utilizzo diffuso e non vuoi che il codice venga chiamato da un codice non collegato. (Esamina questo punto nei commenti ...)

Poiché il metodo non accede a nessun campo di istanza, può essere statico, rendendolo statico, rendendolo più facile da capire e forse anche un po 'più veloce.

Then .... (Forse ora, forse più tardi, forse mai)

Una volta che il metodo è stato reso statico, è chiaro che può essere spostato fuori dalla classe, ad esempio in una classe di unità.

È anche facile trasformarlo in un metodo di istanza di uno dei suoi parametri, spesso questo è dove dovrebbe essere il codice.

    
risposta data 01.04.2014 - 18:17
fonte
2

Posso pensare ad almeno due motivi per cui è necessario un metodo statico privato su una classe.

1: le tue istanze hanno ragione di chiamare un metodo statico che non vuoi chiamare direttamente, forse perché condivide i dati tra tutte le istanze della tua classe.

2: I tuoi metodi statici pubblici hanno subroutine che non vuoi chiamare direttamente. Il metodo è ancora chiamato senza un'istanza, solo non direttamente.

Certamente, "aiuta la classe a dare un senso" è una buona ragione da sola.

    
risposta data 01.04.2014 - 16:59
fonte
1

In generale, se trovo che sto scrivendo metodi statici privati, lo prendo come un'indicazione che c'è qualcosa che avrei dovuto modellare separatamente.

Poiché non sono legati allo stato di una particolare istanza di un oggetto, una raccolta di metodi statici pubblici e privati potrebbe formare una classe completamente separata con la sua semantica e amp; metodi non statici.

(Un altro suggerimento è che se trovo che ho molti metodi statici (pubblici e privati) che hanno tutti un parametro comune di qualche tipo, potrebbero essere migliori come membri di quel tipo.)

Quindi, per rispondere alla tua domanda, i metodi statici privati appaiono quando una classe fornisce un gruppo di metodi correlati che sono indipendenti da un'istanza di quella classe. (... e dal momento che sono indipendenti, potrebbero stare meglio nella loro stessa classe.)

    
risposta data 01.04.2014 - 19:53
fonte
-1

Un esempio molto semplice a cui riesco a pensare è se vuoi eseguire qualche elaborazione sugli argomenti di input (o qualche manipolazione) che vengono passati alla funzione principale. In questo caso, se l'elaborazione è grande e la stessa funzionalità non verrà utilizzata in nessun altro punto, avrà senso avere una funzione privata in quanto non verrà utilizzata / richiamata da nessun'altra parte + statica come principale è statica.

    
risposta data 08.04.2014 - 07:57
fonte

Leggi altre domande sui tag