请在下面检查我的自定义例外:
public class ReportException extends Exception {
private int mCode = -1;
private String mString = "";
public ReportException(int code, String description)
{
super(description);
mCode = code;
mString = description;
}
public int getCode()
{
return mCode;
}
public String getString()
{
return mString;
}
}
我的问题是,为什么这在另一堂课中是非法的:
try{
throw new NullPointerException();
}
catch(ReportException e){
}
对我来说,NullPointerException派生自Exception类,我的自定义ReportException也派生自此,因此既然存在相同的类型,我希望它可以在catch子句中捕获。但是我的IDE表示这是非法的。我与我的一位同事进行了讨论,他说无法做到,但我只是想知道为什么它们都源自同一个Exception类。这看起来无视多态性。
最佳答案
一个NullPointerException
和您的ReportException
都是Exception
,但是要捕获ReportException
,必须抛出一个ReportException
(或子类)。 NullPointerException
不是ReportException
的子类,因此不会被捕获。
而是抛出一个ReportException
。