请在下面检查我的自定义例外:

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

10-04 23:15