Perché dichiarare una stringa (come finale) e poi usarla?

8

In una tipica classe di validazione di mvc di primavera, mentre si inserisce un valore errorCode nell'oggetto Errors, che differenza fa tra l'utilizzo di una stringa ( props.somefield.req ) come in questo modo

errors.rejectValue("elementId", "props.somefield.req");

versi una stringa finale statica dichiarata?

private static final String SOMFIELD_REQ = "props.somefield.req"; ...
errors.rejectValue("elementId", SOMFIELD_REQ);

Migliora le prestazioni anche in un modo minimo? Ho letto alcune domande sullo stack overflow ( Stringa e finale , Ha senso definire una stringa finale in Java? ) ma nessuno è riuscito a rispondere queste domande

    
posta happybuddha 23.07.2014 - 04:23
fonte

2 risposte

20

In fase di runtime, non fa differenza.

Il punto è la leggibilità - come variabile membro, è probabile che venga dichiarata all'inizio del codice sorgente della classe e renderla statica significa che non deve essere allocata per ogni nuova istanza della classe.

Rendere finale significa al lettore che il valore non cambierà (anche al compilatore, ma qui è meno importante).

In questo modo, non ci sono "valori magici" sepolti nell'implementazione, e se si desidera modificare la "costante", è necessario cambiarla solo in un punto.

Questo sostanzialmente imita ciò che un programmatore C farebbe con un #define.

    
risposta data 23.07.2014 - 04:36
fonte
5

I campi final hanno molti vantaggi!

Dichiarare i campi come final ha vantaggi di documentazione preziosi per gli sviluppatori che vogliono utilizzare o estendere la tua classe - non solo aiuta a spiegare come funziona la classe, ma arruola l'aiuto del compilatore per far rispettare le tue decisioni progettuali. A differenza dei metodi final , la dichiarazione di un campo finale consente all'ottimizzatore di prendere decisioni di ottimizzazione migliori , perché se il compilatore sa che il valore del campo non cambia, può memorizzare in modo sicuro il valore in un registro . I campi final forniscono inoltre un ulteriore livello di sicurezza grazie al fatto che il compilatore impone che un campo sia di sola lettura.

Non provare a utilizzare final come strumento di gestione delle prestazioni. Esistono modi molto migliori e meno vincolanti per migliorare le prestazioni del tuo programma. Usa final dove riflette la semantica fondamentale del tuo programma: per indicare che le classi sono intese come immutabili o che i campi devono essere di sola lettura.

Prima di dichiarare i campi finali, dovresti chiederti: questo campo deve davvero essere mutabile?

    
risposta data 26.07.2014 - 21:42
fonte

Leggi altre domande sui tag