Ci sono problemi nell'uso delle variabili di classe in Java a cui si può accedere con qualsiasi metodo?

3

Quindi sono stato codificato in Java per una discreta quantità di tempo, ma recentemente ho iniziato una lezione che si occupa del mio design di codifica. In passato, se avessi due metodi all'interno di una classe che aveva bisogno di modificare la stessa variabile, avrei trasformato la variabile in una variabile di classe. Tuttavia, so che alcune persone preferiscono creare i loro metodi per includere i parametri espliciti e quindi restituire la versione modificata. Ciò si traduce quasi nello stesso effetto di quello che faccio di solito, ma mi chiedevo se c'è un vantaggio in un modo o nell'altro.

Esempio 1:

    public class foo{
        private static String toBeEdited;

        private static void main(String args[]){
            toBeEdited = "Original string";
            editingMethod();
            ... Code that uses the toBeEdited variable with its new value...
        }
        private static void editingMethod(){
            toBeEdited = "Edited String";
        }
    }

Esempio 2:

    public class foo{

        private static void main(String args[]){
            String toBeEdited;
            toBeEdited = "Original string";
            toBeEdited = editingMethod(toBeEdited);
            ... Code that uses the toBeEdited variable with its new value...
        }
        private static String editingMethod(String tBE){
            tBE = "Edited String";
            return tBE;
        }
    }

Grazie!

    
posta Tyler M 08.09.2018 - 17:57
fonte

2 risposte

4

Il vantaggio di 1 è inferiore Arity , ha meno argomenti. Meno ce ne sono, più sono facili da ricordare.

Il vantaggio di 2 è che il suo effetto e la sua dipendenza sono espliciti. Dove è usato è ovvio che userà una stringa e che cambierà una stringa.

Sia la leggibilità dell'impatto, ma 2 è un enorme miglioramento in cui 1 è solo un piccolo miglioramento.

    
risposta data 09.09.2018 - 04:08
fonte
0

Il più grande vantaggio dell'esempio 2 è che rende la classe immutabile. L'esempio specifico che hai fornito non è il migliore per mostrare questo vantaggio perché usa metodi statici. Il primo esempio utilizza anche un campo statico che IMHO è una cattiva pratica da solo.

Ma se il campo non era statico, il primo esempio modifica lo stato dell'oggetto, mentre i secondi no. Gli oggetti immutabili sono particolarmente importanti per il multithreading ma rendono anche il codice più facile da ragionare. Pertanto, anche se il campo e i metodi non fossero statici, probabilmente preferirei la seconda opzione perché rende la classe immutabile.

Nota anche che se quel campo non è intrinseco all'essenza (o alla responsabilità principale) dell'oggetto, allora è un'altra indicazione che non dovrebbe essere un membro della classe (sebbene possa essere un membro di un'altra classe ), e se è intrinseco all'essenza della classe, se rendi la classe immutabile come suggerito, ogni volta che questo valore cambia dovresti restituire una nuova istanza della classe con il nuovo valore, lasciando invariata l'istanza esistente.

    
risposta data 09.09.2018 - 13:10
fonte

Leggi altre domande sui tag