metodo privato che non usa membri di istanza: migliore statico? [duplicare]

2

Ho un metodo di helper privato che non usa variabili o metodi di istanza, penso che sarebbe meno confuso se fosse statico (in questo modo, ha meno punti a cui può accedere).

Sono un po 'insicuro se questo la domanda si applica anche ai metodi privati.

Ho anche dato un'occhiata a questa seconda domanda ma ancora una volta il test non testerà direttamente i metodi di supporto statici privati.

Domanda: Perché non dovrei rendere statici i miei metodi di helper privati? È la confusione che potrebbe indurre qualcuno a riutilizzarlo in un contesto statico? Per quanto vedo, dovrebbe andare bene.

Ogni pensiero e suggerimento è apprezzato.

    
posta user85190 23.07.2015 - 09:56
fonte

2 risposte

5

La diffusa antipatia nei confronti dei metodi statici è in gran parte dovuta al timore che non sia possibile sovrascrivere facilmente un metodo per testare la classe o il mocking per testare un'altra classe.

Con un metodo privato questo non è un problema, quindi la mia opinione è: se può essere statico, renderlo statico - questo agisce come un utile bit di documentazione automatica ("questo metodo non dipende da nessuno stato di istanza a tutti"). Non dovresti riscrivere metodi helper in modo che diventi in grado statico (ad esempio sostituendo l'accesso al campo con i parametri di input), ma se questa è la sua forma naturale non c'è nulla di male e un po 'di guadagno.

    
risposta data 23.07.2015 - 10:01
fonte
3

Per rispondere a questo, dovremmo chiarire la definizione di static :

Static methods are meant to be relevant to all the instances of a class rather than to any specific instance. They are similar to static variables in that sense. An example would be a static method to sum the values of all the variables of an instance for a class. For example, if there were a Product class it might have a static method to compute the average price of all products.

Qualsiasi metodo statico può diventare un metodo non statico, quindi essere statici rilascia una dichiarazione sull'impatto che tale metodo avrebbe sulla propria istanza, vale a dire nessuno, a meno che, naturalmente, non si passasse detta istanza al metodo statico (sconfiggendo così lo scopo di essere statici).

Questo metodo non ha lo stato per fare il suo lavoro correttamente e potrebbe fare riferimento a qualsiasi istanza, quindi direi di sì, dovresti renderlo statico. Tuttavia assicurati di lasciarlo anche privato, poiché si tratta di un metodo che ha senso solo nel contesto della tua classe, e fino a quando non cambierà, dovrebbe rimanere privato.

Se ti trovi con molti di questi metodi di helper statici privati, dovresti prendere in considerazione la creazione di una classe finale con un costruttore privato contenente solo metodi statici protetti, che possono essere chiamati solo da classi nel tuo pacchetto.

Spero che risponda alla tua domanda.

    
risposta data 23.07.2015 - 10:09
fonte

Leggi altre domande sui tag