java - sirve - ¿Desea cambiar la excepción no controlada autogenerada en Eclipse?
settitle java (4)
Si tengo una excepción no controlada en Java, Eclipse me propone dos opciones: (1) agregar declaración de tiros y (2) envolver con intentar / atrapar.
Si elijo (2) añade un código.
try {
myfunction();
} catch (MyUnhandledException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Quiero cambiar esto a
try {
myfunction();
} catch (MyUnhandledException e) {
throw new RuntimeException(e);
}
es posible?
ACTUALIZAR
¿Por qué les encanta tanto cambiar el tema de la gente?
Si la excepción se captura e imprime, tampoco es necesario que la atrape más. Me gusta que mi aplicación falle si me olvido de manejar una excepción por error. Entonces, me gusta volver a lanzarlo por defecto.
Personalmente, utilizo un lenguaje genérico independientemente del tipo de excepción real verificada, puede hacer que Eclipse use eso como una plantilla:
try {
...
}
catch (RuntimeException e) { throw e; }
catch (Exception e) { throw new RuntimeException(e); }
El punto es envolver todo el bloque de código en lugar de individualmente cada línea que puede generar una excepción. El bloque puede lanzar cualquier número de excepciones marcadas y no comprobadas, y esto permitirá que las excepciones no controladas pasen sin ser dañadas, y las excepciones comprobadas serán envueltas.
Probablemente esté al tanto de esto ... pero si desea deshacerse de todo el desorden y las irritaciones molestas de las excepciones comprobadas, ¿por qué no agregar throws Exception
a todos los métodos?
En el caso de un método de interfaz anulado, este tipo de patrón podría utilizarse:
@Override
public void close() throws IOException {
try {
_close();
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
private void _close() throws Exception {
// ... closing ops
}
Sí, puede cambiar el código predeterminado agregado por Eclipse.
- En Preferencias, navegue a Java> Estilo de código> Plantillas de código .
- En Código , seleccione Bloquear cuerpo de captura .
- Pulse el botón Editar para cambiar el código. Cuando haya terminado, presione el botón OK .
Considere agregar un comentario TODO en el bloque catch predeterminado. Por ejemplo, el valor predeterminado incluye:
// ${todo} Auto-generated catch block
Si está volviendo a lanzar su excepción de la cláusula catch, entonces tendría que manejar el método que invocó su método actual. Pero si envuelve su excepción en RuntimeException
, no necesitará manejarlo. ¿Pero por qué harías eso?
Quiero decir por qué no simplemente: -
try {
myfunction();
} catch (MyUnhandledException e) {
throw e;
}
Porque, en su código, básicamente está envolviendo una checked exception
en una unchecked one
. Si asumo su MyUnhandledException
como checked exception
.
Y también tenga en cuenta que, si está siguiendo este enfoque, aún tendría que declare it
de su throws clause
.
Si solo quieres hacer lo que estás haciendo, entonces también funcionará bien. Puede cambiar la Eclipse setting
según la respuesta de @ Andy.
Pero, sería mejor mirar su diseño. ¿Por qué el método anulado genera una excepción no declarada en su método overriden
? Probablemente hay algo mal, que debe ser corregido.