Java 为什么不能在泛型catch子句中捕获自定义异常
请在下面检查我的自定义异常:Java 为什么不能在泛型catch子句中捕获自定义异常,java,exception,inheritance,exception-handling,polymorphism,Java,Exception,Inheritance,Exception Handling,Polymorphism,请在下面检查我的自定义异常: public class ReportException extends Exception { private int mCode = -1; private String mString = ""; public ReportException(int code, String description) { super(description); mCode = code;
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说这是非法的。我和我的一位同事讨论过这个问题,他说这是不可能的,但我只是想知道为什么,因为它们都来自同一个异常类。这看起来是对多态性的挑战 在
try
块中的某些代码必须抛出选中的异常,然后才能显式捕获它
这是有效的:
try {
throw new ReportException();
}
catch(ReportException e){
// handle it
}
请参见在
try
块中的某些代码必须抛出选中的异常,然后才能显式捕获它
这是有效的:
try {
throw new ReportException();
}
catch(ReportException e){
// handle it
}
请参见A
nullpointereexception
和您的ReportException
都是Exception
s,但要捕获ReportException
,必须抛出ReportException
(或子类)。NullPointerException
不是ReportException
的子类,因此它不会被捕获
抛出一个
ReportException
。aNullPointerException
和您的ReportException
都是Exception
,但要捕获ReportException
,必须抛出一个ReportException
(或子类)。NullPointerException
不是ReportException
的子类,因此它不会被捕获
抛出一个
ReportException
。java中的每个类都是java.lang.Object的继承者,但这并不意味着所有这些类都可以相互转换
对于计算机来说,这两个类彼此完全不同。java中的每个类都是java.lang.Object的继承者,但这并不意味着所有这些类都可以相互转换
对于计算机来说,这两个类是完全不同的。
“…NullPointerException是从Exception类派生的,我的自定义ReportException也是如此,因为有相同的类型…”
--狗是动物,猫也是,但这并不意味着狗就是猫。NullPointerException
和ReportException
都是Exception
s,但是NullPointerException
不是一种ReportException
。同样,德国人和意大利人都是欧洲人,但德国人不是意大利人。@immibis False。顺便说一句,这就是这个问题的实质。“…NullPointerException是从Exception类派生的,我的自定义ReportException也是如此,因为有相同的类型…”
--狗是动物,猫也是,但这并不意味着狗就是猫。NullPointerException
和ReportException
都是Exception
s,但是NullPointerException
不是一种ReportException
。同样,德国人和意大利人都是欧洲人,但德国人不是意大利人。@immibis False。顺便说一句,这就是这个问题的实质。或者说,捕捉异常。或者两者都有一个catch块来分别处理。或者catch异常。或者两个都有一个catch块来独立处理,但这与checked和unchecked没有关系。这确实是一个关于多态性的问题。不过,这与检查与未检查并没有关系。这确实是一个关于多态性的问题。