Prima di tutto, ci scusiamo se si tratta di un duplicato di una domanda esistente. Non sapevo esattamente come pronunciare la mia domanda, quindi potrebbe essere il motivo per cui non ho ancora trovato una risposta chiara. In sostanza, voglio sapere se quanto segue è considerato buona pratica o se c'è un modo migliore per fare questo:L'utilizzo di un'istanza di oggetti come valore di una voce enum è una buona pratica?
public enum ExampleEnum {
ENTRY_1(new ExampleCodedValue("entry1", "comment1")),
ENTRY_2(new ExampleCodedValue("entry2", "comment2")),
ENTRY_3(new ExampleCodedValue("entry3", "comment3")),
ENTRY_4(new ExampleCodedValue("entry4", "comment4"));
private ExampleCodedValue codedValue;
ExampleEnum(ExampleCodedValue codedValue) {
this.codedValue = codedValue;
}
public ExampleCodedValue getCodedValue() {
return codedValue;
}
}
class ExampleCodedValue {
private final String code;
private final String comment;
ExampleCodedValue(String code, String comment) {
this.code = code;
this.comment = comment;
}
}
+1 principio KISS. BTW Generalmente creo enum con campi (come questo). Possono essere notevolmente maneggevoli. – Bohemian
Il motivo principale è che questo enumerato, e altri simili, usano un tipo di dati comune di 'ExampleCodedValue'. Ad esempio, potresti avere due enumerazioni, "Impostazioni" e "Attributi". Ciascuno è composto da un codice e un commento. È una semplificazione eccessiva del mio caso d'uso reale ma le due enumerazioni sono distinte in termini di ciò che incapsulano. Ho anche considerato di utilizzare l'esempio di @ Jeffery e di avere un metodo accessor che restituisce il tipo 'ExampleCodedValue'. Forse è un modo migliore di farlo? – speedRS
@speedRS Mi stavo chiedendo perché avresti fatto tutto il possibile per creare un oggetto che non offrisse funzionalità aggiuntive. Ma dal momento che il tuo caso d'uso richiede di avere quell'oggetto particolare, non c'è niente di sbagliato nel tuo esempio originale. – Jeffrey