Per essere più specifici, voglio scrivere un codice che genera IllegalArgumentException
se il valore dato è negativo. Dovrei includere questo codice all'interno di setter/costruttore o dovrei controllare il valore quando viene chiamato il metodo appropriato? (Ad esempio:.. start()
, init()
, print()
o run()
qualsiasi altra cosa)È buona pratica lanciare l'eccezione all'interno dei setter in Java?
Il mio codice (semplificato):
public class LLUAlgorithm {
private int temperature;
public int getTemperature() {
return temperature;
}
public void setTemperature(int temperature) {
if (temperature < 0)
throw new IllegalArgumentException("can't be smaller than 0.")
this.temperature = temperature;
}
public void run() {
...
}
non ricordo un solo caso che un setter genera un'eccezione come sopra. Ma sono curioso di sapere se è buono/cattivo.
Bene, il nome dell'eccezione contiene _illegal argument_, quindi ovviamente è possibile lanciarlo, quando un argomento era illegale, come un numero negativo. E sì, questo può accadere in un setter e non ho mai sentito dire che questa sarebbe una cattiva pratica (perché non lo è). – Tom
sì, è ok, si potrebbe anche provare a essere più specifici con l'eccezione ... se è nullo, se è indice non valido o definire l'eccezione personalizzata –
Si dovrebbe lanciare IllegalArgumentException. Puoi esagerare con un modello di builder. Hai letto il libro "Efficace Java", che ha materiale sul modello di builder. –