请在下面检查我的自定义异常:
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
。
关于java - 为什么不能在通用 catch 子句中捕获自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28099796/