Estoy tratando de definir mi propia clase de excepción de la manera más fácil, y esto es lo que estoy obteniendo:
public class MyException extends Exception {}
public class Foo {
public bar() throws MyException {
throw new MyException("try again please");
}
}
Esto es lo que dice el compilador de Java:
cannot find symbol: constructor MyException(java.lang.String)
Tenía la sensación de que este constructor tiene que ser heredado java.lang.Exception
, ¿no?
java
exception
inheritance
yegor256
fuente
fuente
if your class has no constructor, you get the default even if the superclass does not have it
La última parte es imposible, a menos que la superclase tenga un constructor predeterminado que sea accesible para esta clase (puede estar protegido o protegido por paquete). De lo contrario, debe llamar explícitamente a uno de los constructores principales, o la compilación fallará.MyException(Throwable)
yMyException(String, Throwable)
para admitir correctamente el encadenamiento de excepciones .Una excepción personalizada típica que definiría es algo como esto:
Incluso creo una plantilla usando Eclipse para no tener que escribir todo el material una y otra vez.
fuente
Si usa el cuadro de diálogo de nueva clase en Eclipse, puede configurar el campo Superclase
java.lang.Exception
y marcar "Constructores de la superclase" y generará lo siguiente:En respuesta a la siguiente pregunta acerca de no llamar
super()
al constructor defualt, Oracle tiene esto que decir :fuente
super()
?La razón de esto se explica en el artículo de Herencia de la Plataforma Java que dice:
fuente
fuente
La clase de excepción tiene dos constructores.
public Exception()
- Esto construye una excepción sin ninguna información adicional. La naturaleza de la excepción generalmente se infiere del nombre de la clase.public Exception(String s)
- Construye una excepción con un mensaje de error especificado. Un mensaje detallado es una Cadena que describe la condición de error para esta excepción en particular.fuente
public Exception(Throwable)
ypublic Exception(String, Throwable)
. Son necesarios para soportar adecuadamente el encadenamiento de excepciones .Si hereda de Exception, debe proporcionar un constructor que tome un String como parámetro (contendrá el mensaje de error).
fuente
y no olvides la forma más fácil de lanzar una excepción (no necesitas crear una clase)
fuente