Quando eseguo enum che contengono alcuni campi, come il mio Settings
enum, mi piace renderli pubblici finali per evitare un sacco di (
e )
sequenze di tasti:
public enum Settings {
SETTING_TEST("bool_setting1", false),
USERNAME("user_name", "me")
;
public final String name;
public final Object default_val;
Setnames(String n, Object d) {
name = n;
default_val = d;
}
}
Questo enum viene quindi applicato per cercare (o impostare le impostazioni di default) in qualche hashmap (incapsulato in una classe più sofisticata). Questo design consente di controllare i nomi delle impostazioni sull'intero progetto (poiché i nomi dei enum possono essere rifatti, a differenza delle stringhe).
Tuttavia, il mio insegnante mi ha avvertito di questo progetto e ci sono alcune risposte che suggeriscono che puoi pentirti di aver progettato il tuo progetto con public final
senza incapsulamento.
Non sto solo chiedendo regole e convenzioni, ma anche la tua esperienza (il centro assistenza non dire qualcosa di negativo sulla richiesta di opinioni, quindi lo faccio). Anche se espanderei volentieri la domanda su altre lingue che supportano le funzionalità in questione, non sono sicuro che ciò non renderebbe la domanda troppo ampia - motivo per cui penso che dovremmo limitarci solo a Java.
Modifica
La SE GUI mi chiede di spiegare in che modo la mia domanda è diversa da quella a cui mi sono collegato. Altre persone hanno già indicato nei commenti la differenza, ma ripetiamolo:
La maggior parte delle risposte sull'altra domanda sottolinea problemi non applicabili alle enumerazioni. Spesso usiamo incapsulamento getXXX
per consentire alle classi di estendere correttamente la nostra classe. Ma non possiamo estendere da enum . Generalmente, nonostante la sintassi simile, le enumerazioni sono sostanzialmente diverse dalle classi e dalle interfacce .