Questo dipende completamente dal dominio del problema e da come viene utilizzata l'interfaccia. Ho scritto interfacce in entrambi i modi.
Ho visto librerie SOAP che non consentono valori nulli, rendendo superfluo Integer
.
Il rovescio della medaglia, ho usato Integer
per i dati memorizzati nella cache (in particolare, menzioni "variabili d'istanza" nella tua domanda, non solo l'API):
public class Test implements Serializable {
private transient Integer hash;
public int hashCode() {
if (hash == null) {
hash = <time-consuming hash operation>;
}
return hash.intValue();
}
}
In questo caso, l'oggetto viene utilizzato come una chiave in HashMap
, quindi ha senso memorizzare nella cache un valore hash anziché ricalcolarlo più e più volte. Usare Integer
significa che posso dire con certezza al 100% che ho già calcolato il valore o meno (al contrario del valore sentinel di String
che in teoria può produrre una collisione hash).
Se un'API accetta un intero ma assume non null, si tratta di uno scenario fail-fast . Lancia un NullPointerException
e dovrebbe farlo rapidamente. Il codice client che utilizza la tua API dovrebbe incontrare questa eccezione piuttosto rapidamente, rendendo più facile trovare e correggere i dati non validi durante il test.
Raccomando di usare Integer
(magari con Facoltativo per chiarisci) per i dati opzionali e int
quando è richiesto.