Estou tentando definir minha própria classe de exceção da maneira mais fácil, e é isso que estou recebendo:
public class MyException extends Exception {}
public class Foo {
public bar() throws MyException {
throw new MyException("try again please");
}
}
Isto é o que o compilador Java diz:
cannot find symbol: constructor MyException(java.lang.String)
Tive a sensação de que esse construtor deve ser herdado java.lang.Exception
, não é?
java
exception
inheritance
yegor256
fonte
fonte
if your class has no constructor, you get the default even if the superclass does not have it
A última parte é impossível, a menos que a superclasse tenha um construtor padrão acessível a essa classe (pode ser protegido ou protegido por pacote). Caso contrário, você deve chamar explicitamente um dos construtores pai, ou a compilação falhará.MyException(Throwable)
eMyException(String, Throwable)
para suportar adequadamente o encadeamento de exceções .Uma exceção personalizada típica que eu definiria é algo como isto:
Eu até crio um modelo usando o Eclipse, para não precisar escrever todas as coisas repetidamente.
fonte
Se você usar o novo diálogo de classe no Eclipse, poderá definir o campo Superclasse como
java.lang.Exception
e marcar "Construtores da superclasse" e isso gerará o seguinte:Em resposta à pergunta abaixo sobre não chamar
super()
o construtor defualt, a Oracle tem o seguinte a dizer :fonte
super()
?A razão para isso é explicada no artigo Herança da plataforma Java, que diz:
fonte
fonte
A classe de exceção possui dois construtores
public Exception()
- Isso cria uma exceção sem nenhuma informação adicional. A natureza da exceção geralmente é inferida a partir do nome da classe.public Exception(String s)
- Constrói uma exceção com a mensagem de erro especificada. Uma mensagem de detalhe é uma String que descreve a condição de erro para essa exceção específica.fonte
public Exception(Throwable)
epublic Exception(String, Throwable)
. Eles são necessários para suportar adequadamente o encadeamento de exceções .Se você herdar de Exception, precisará fornecer um construtor que use uma String como parâmetro (ela conterá a mensagem de erro).
fonte
e não esqueça a maneira mais fácil de lançar uma exceção (você não precisa criar uma classe)
fonte