Qual è la procedura migliore da seguire quando è necessario generare un'eccezione non definita in un'interfaccia che si sta implementando?Lancio di un'eccezione non definita nell'interfaccia
Ecco un esempio:
public interface Reader
{
public abstract void read() throws IOException;
}
public class CarrotReader implements Reader
{
public void read() throws IOException {}
}
public class CupcakeReader implements Reader
{
public void read() throws IOException, CupcakeException {}
}
In questo caso, si dispone di una specifica deroga che si verifica quando la lettura di dolcetti, così si vuole lanciare un'eccezione relative a questo. Tuttavia, Reader non definisce questo tipo di eccezione nella sua interfaccia, quindi cosa fai? Inoltre, non ha senso aggiungere CupcakeException al tiri clausola del Reader interfaccia , perché questo tipo di eccezione è specifico per CupcakeReader. Un modo per aggirare questo è quello di definire leggere in modo tale che genera un tipo genitore, come Eccezione, ma poi si perde il contesto per l'eccezione. Cosa dovresti fare in questa situazione? Grazie!
Un'altra situazione interessante che è stata sollevata comporta un'interfaccia su cui non si ha alcun controllo. In questo caso, qual è il modo migliore per indicare che si è verificato un problema?
A scopo illustrativo, qui è un altro esempio:
public interface Reader
{
public abstract void read();
}
public class CupcakeReader implements Reader
{
public void read() throws CupcakeException {}
}
In questo caso, non è possibile modificare Reader, ma si vuole indicare che un problema si è verificato in CupcakeReader s' leggere metodo.
Questo è ancora peggio di quello che pensavo. In questo modo non puoi nemmeno usare il concatenamento per eludere il sistema. Penso che tu debba ricorrere a (ahi!) 'RuntimeExceptions'. –
Ho fatto ricorso a System.err.println e a exception.printStackTrace() ;. È appropriato o dovrei propagare l'errore con un RuntimeExecption come hai detto? – Scott
Penso che log + swallow non sia appropriato al 99,99% delle volte. È un modello comune (anti -?) Tra gli sviluppatori Java a causa del problema presentato qui. Nella mia "scuola di pensiero", ci sono solo tre modi validi per gestire le eccezioni: rilanciare, gestire (ad esempio, risolvere il problema), o lasciarlo scoppiare a qualcuno che può gestirlo. Non ingoiare mai. Se qualcosa è andato storto, ci saranno conseguenze. –