Domanda Perché usare Enum al posto di Costanti?


Ho uno scenario in cui ho i tipi di giocatore ARCHER, WARRIOR e lo stregone. Cosa dovrei usare nella classe del giocatore? Una variabile String per tipo o un Enum? Perché enum e perché stringhe costanti. Si prega di aiutare con le ragioni.


44
2017-07-20 08:09


origine


risposte:


Supponiamo che tu usi stringhe costanti (o int valori - lo stesso vale per loro):

// Constants for player types
public static final String ARCHER = "Archer";
public static final String WARRIOR = "Warrior";

// Constants for genders
public static final String MALE = "Male";
public static final String FEMALE = "Female";

poi finisci per non conoscere veramente il tipo dei tuoi dati - portando a codice potenzialmente errato:

String playerType = Constants.MALE;

Se usi le enumerazioni, finirebbe come:

// Compile-time error - incompatible types!
PlayerType playerType = Gender.MALE;

Allo stesso modo, le enumerazioni danno un insieme limitato di valori:

String playerType = "Fred"; // Hang on, that's not one we know about...

vs

PlayerType playerType = "Fred"; // Nope, that doesn't work. Bang!

Inoltre, le enumerazioni in Java possono avere più informazioni associate a loro e possono anche avere un comportamento. Molto meglio a tutto tondo.


87
2017-07-20 08:13



Le enumerazioni ti limitano al set di input richiesto, mentre anche se usi stringhe costanti puoi ancora usare altre stringhe che non fanno parte della tua logica.

Questo ti aiuta a non commettere errori, a inserire qualcosa fuori dal dominio, mentre inserisci i dati e migliora anche la leggibilità del programma.

Inoltre puoi sempre usare le tue enumerazioni come String se lo desideri. Ecco un riferimento.


9
2017-07-20 08:13



Oltre a non permettervi di fornire un valore errato, c'è ancora un'altra caratteristica delle enumerazioni che può sembrare minore, ma a mio parere è abbastanza importante. Gli IDE moderni possono suggerire automaticamente i valori per le enumerazioni, mentre non c'è modo di inferire in modo affidabile i possibili valori di una costante di stringa (Intellij IDEA fa quest'ultimo, ma solo per le classi JDK e le librerie popolari). Ciò è particolarmente utile quando si esplora una nuova API.


5
2017-07-20 08:30



Ti consiglio di utilizzare le enumerazioni solo se hai davvero bisogno di costanti numerate o di alcune funzionalità aggiuntive comuni a tutti gli articoli.

Ovviamente, dipende dal tipo di applicazione che stai scrivendo e da quali versioni e dispositivi vuoi supportare.

Il motivo è che le enumerazioni aumentano il sovraccarico perché allocano le istanze dei loro articoli. Puoi notare che ci sono enumerazioni minime nella piattaforma Android e quasi tutte le costanti sono ints statici finali (come View.GONE e cose del genere)


0
2017-07-20 08:27



Enum è meglio usare per la sicurezza del tipo. Non è possibile inserire valori errati. Ma enum in Android richiede tanta memoria, dovresti invece usare intdef. Fare riferimento a questa risposta per esempi e spiegazioni: -

Esempio IntDef / StringDef

Puoi anche controllare il codice sorgente di Android che sostituisce l'enumerazione con IntDef / StringDef ovunque sia possibile. Ex. View.VISIBLE.


0
2017-09-03 09:58