java - 为什么不能在通用 catch 子句中捕获自定义异常

标签 java inheritance exception polymorphism

请在下面检查我的自定义异常:

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/

相关文章:

java - 在 Java 中执行 shell 脚本并读取输出

java - 实例化基类扩展时出现问题

c++ - 将派生类转换为基类时 dynamic_cast 失败

c++ - 尝试在 C++ 中实现异常时出错

ruby - 从不同的地方重新提出 ruby 异常

c++ - 用异常抽象包装 C 错误处理的最佳方法

Java 和 SQLite 问题

java - 如何在 Android 中访问剪贴板数据?

java - 如何在 Solaris 上为 Java 进行远程调试工作

C# 到 VB.Net 问题