quando si definisce un enum per qualcosa che può essere "indefinito" nelle interfacce, si dovrebbeSi dovrebbe definire un valore nullo/sconosciuto per le enumerazioni Java?
- definire un valore enum separato per questo, o
- basta usare EnumValue = null per quelle situazioni?
Ad esempio,
serviceX.setPrice (prezzo priceEnum)
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE, UNKNOWN
}
e priceEnum.UNKNOWN quando necessario
o
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE
}
e priceEnum = null quando necessaria?
Avere un piccolo dibattito su questo. Alcuni punti che ti vengono in mente:
- utilizzando Price.UNKNOWN salva un codice "if (price == null)". Puoi gestire Prezzo x tutti i valori in un singolo switch
- A seconda della tecnologia di visualizzazione, potrebbe essere più facile localizzare Price.UNKNOWN
- utilizzando il tipo Price.UNKNOWN di problema "numero magico" nel codice, IMO . Qui abbiamo Price.UNKNOWN, altrove forse Color.UNDEFINED, Height.NULLVALUE, ecc.
- utilizzando priceValue = null è più uniforme con il modo in cui altri tipi di dati vengono gestiti in Java. Abbiamo Integer i = null, DomainObject x = null, String s = null anche per valori sconosciuti, no?
- Price.UNKNOWN ti obbliga a decidere se il valore nullo è consentito per tutti i casi d'uso. Potremmo avere metodo prezzo getPrice() che può restituire Price.UNKNOWN e setPrice (Price p) che non è autorizzato ad accettare Price.UNKNOWN. Poiché Price.UNKNOWN è sempre incluso nei valori di enum, quelle interfacce appaiono un po 'sporche. So priceValue = null ha lo stesso problema (non è possibile definire nell'interfaccia se nulla è accettata o no), ma ci si sente un po 'più pulito e un po' meno fuorviante (?)
non è possibile utilizzare "null" in uno switch e questo è uno svantaggio principale. – bestsss
Buoni punti da parte di tutti. Ridurre l'onere della gestione nulla e la capacità di essere più specifici su cosa significhi "valore nullo" punti buoni per Price.UNKNOWN. Inoltre, buon punto su "modello oggetto nullo", rende Price.UNKNOWN più una soluzione "valida" e comunemente accettata. Ma nessuno si sente allo stesso modo su Price.UNKNOWN aspetti negativi? Ritengo che avere Price.UNKNOWN inquini il set di valori dell'enum. Dì in showAllPrices(), non posso più enumerare tutti i valori enum, devo aggiungere se (! Price.UNKNOWN), che sembra un po 'sporco e "magico-numeroso". – user449236
* @ user449236 *: Se non ti piace controllare questo valore speciale, aggiungi un flag 'display' a ogni enumerazione e controllalo. Più pulito e più flessibile. –