Come sottolineato da Spoike, l'utilizzo del polimorfismo per scegliere il giusto metodo di gestione degli errori è un'opzione. Questo approccio rimuove fondamentalmente i 10+ se blocchi alla ricerca del metodo virtuale della JVM, definendo una gerarchia di classi.
Ma prima di passare a una gerarchia di classi in piena regola, considerare anche l'utilizzo dei metodi enum
. Questa opzione funziona bene se ciò che si intende fare in ciascun caso è abbastanza simile.
Ad esempio, se si vuole restituire un messaggio di errore diverso per ogni ErrorCode
, si può semplicemente fare questo:
// Note singular name for enum
public enum ErrorCode {
INVALID_LOGIN(100, "Your login is invalid"),
INVALID_PASSWORD(101, "Your password is invalid"),
SESSION_EXPIRED(102, "Your session has expired");
private final int code;
private final String
private ErrorCode(int code, String message){
this.code = code;
this.message = message;
}
public String getMessage() {
return message;
}
}
Poi il codice di gestione degli errori diventa solo:
ErrorCode errorCode = getErrorCode();
prompt(errorCode.getMessage());
Uno svantaggio di questo approccio è che se si desidera aggiungere ulteriori casi, è necessario modificare l'enum stesso, mentre con una gerarchia di classi è possibile aggiungere nuovi casi senza modificare il codice esistente.
È solo una "dichiarazione di caso" che aiuta o mi sfugge qualcosa? – Jean
Sì, poiché in questo modo dovresti cambiare la tua implementazione ogni volta, l'enum cambia (nuove case statement ad esempio). Quando si implementa il codice basato su un buon design OO, dovresti provare ad essere aperto per le estensioni ma chiuso per le modifiche. – Mephisztoe