Sto progettando una classe che contiene diversi tipi di dati. Alcune delle proprietà sono facoltative. Ad esempio, supponiamo di avere una classe che rappresenta una persona e una delle proprietà è l'occupazione. Ho un'altra proprietà, grado militare, ma questa proprietà può essere recuperata solo se l'occupazione della persona è militare. Qual è il modo migliore per gestirlo?
- Avere
getMilitaryRank()
gettareIllegalStateException
se l'occupazione non è militare - ha
getMilitaryRank()
restituisce unOptional<Rank>
- Restituisce null se l'occupazione non è valida (non mi piacciono i valori null)
- Qualcos'altro?
L'idea 1 funziona perché l'utente può controllare l'occupazione prima di chiamare questo metodo, assicurandosi che non lo chiamino su una persona non valida.
L'idea 2 sembra superflua, perché puoi dedurre se l'opzione è presente chiamando getOccupation()
.
Tuttavia, supponiamo che la mia classe Person abbia un'altra proprietà opzionale, ma la sua presenza non può essere dedotta dal valore di un'altra proprietà; per esempio, un secondo nome. Ovviamente è meglio che getMiddleName()
restituisca un Optional
o null vuoto se la persona non ha un secondo nome, in quanto la presenza di un secondo nome non può in realtà essere dedotta in altro modo.
Poiché probabilmente dovrei essere coerente nel modo in cui gestisco le proprietà facoltative, sembra che potrei svolgere una delle seguenti operazioni:
- Utilizza
Optional
per qualsiasi proprietà che potrebbe essere assente, anche se può essere dedotta da un'altra proprietà. - Aggiungi metodi come
hasMiddleName()
per risolvere le discrepanze (questa sembra una cattiva idea) - Non essere coerente e lasciare che le proprietà la cui presenza possa essere determinata esternamente generino un'eccezione, mentre quelle indipendenti siano racchiuse in un
Optional
. - Qualcos'altro?
Mentre i null possono semplificare le cose, causa un problema se una proprietà opzionale è un int
, che non può essere annullabile in Java. Potrei usare Integer
, ma mi sembra una cattiva idea.
Qual è il modo migliore per gestire questi diversi tipi di proprietà facoltative?