¿Cuál es la mejor práctica a seguir cuando necesita lanzar una excepción que no estaba definida en una interfaz que está implementando?Lanzar una excepción no definida en la interfaz
Aquí se muestra un ejemplo:
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 {}
}
En este caso, usted tiene una excepción específica que se produce cuando la lectura de pastelitos, por lo que desea lanzar una excepción en relación con esto. Sin embargo, Reader no define este tipo de excepción en su interfaz, entonces, ¿qué hace usted? Por otra parte, no tiene sentido para añadir CupcakeException a la tiros cláusula en la interfaz del lector , porque este tipo de excepción es específico para CupcakeReader. Una forma de evitar esto es tener Lector definir leer de manera que arroje algún tipo parental, como Excepción, pero luego pierde el contexto de la excepción. ¿Qué deberías hacer en esta situación? ¡Gracias!
Otra situación interesante que se ha planteado implica una interfaz sobre la que no tiene control. En este caso, ¿cuál es la mejor manera de indicar que ha ocurrido un problema?
Para fines ilustrativos, aquí es otro ejemplo:
public interface Reader
{
public abstract void read();
}
public class CupcakeReader implements Reader
{
public void read() throws CupcakeException {}
}
En este caso, no se puede cambiar lector, pero desea indicar que ha ocurrido un problema en CupcakeReader 's leer método.
Eso es aún peor de lo que pensaba. De esta forma, ni siquiera puede usar el encadenamiento para eludir el sistema. Creo que debes recurrir a (¡ouch!) 'RuntimeExceptions'. –
Recurrí a System.err.println y a exception.printStackTrace() ;. ¿Es apropiado, o debería propagar el error con un RuntimeExecption como dijiste? – Scott
Creo que registrar + tragar no es apropiado el 99,99% del tiempo. Es un patrón común (¿contra -?) Entre desarrolladores Java debido al problema presentado aquí. En mi "escuela de pensamiento", solo hay tres formas válidas de lidiar con las excepciones: volver a tirar, manejar (es decir, solucionar el problema) o dejar que le suba a alguien que pueda manejarlo. Nunca tragues. Si algo salió mal, habrá consecuencias. –