Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果另一个异常吃掉了原始异常,我是否应该在顶部异常中保留对原始异常的引用?_Java_Exception_Exception Handling_Try Catch - Fatal编程技术网

Java 如果另一个异常吃掉了原始异常,我是否应该在顶部异常中保留对原始异常的引用?

Java 如果另一个异常吃掉了原始异常,我是否应该在顶部异常中保留对原始异常的引用?,java,exception,exception-handling,try-catch,Java,Exception,Exception Handling,Try Catch,考虑此自定义异常类: public class CustomException extends Exception { private static final long serialVersionUID = 1L; public static final int EXCEPTION1 = 1; public static final int EXCEPTION2 = 2; public static final int EXCEPTION3 = 3;

考虑此自定义
异常
类:

public class CustomException extends Exception {

    private static final long serialVersionUID = 1L;

    public static final int EXCEPTION1 = 1;
    public static final int EXCEPTION2 = 2;
    public static final int EXCEPTION3 = 3;

    private int exceptionType;
    private Throwable guiltyException;

    public CustomException(String message, int type, Throwable cause){
        super(message);
        this.exceptionType = type;
        this.guiltyException = cause;
    }

    public int getExceptionType(){
        return this.exceptionType;
    }

    public Throwable getGuiltyException(){
        return this.guiltyException;
    }

}
然后假设有这样一种方法:

public SomeReturnType someMethod(SomeArgument argument) throws CustomException{
    try{
        someExceptionalMethodCall(); // Throws Exception1, Exception2, Exception3
    } catch (Exception1 e1) {
        throw new CustomException("Some info1", CustomException.EXCEPTION1, e1);
    } catch (Exception2 e2) {
        throw new CustomException("Some info2", CustomException.EXCEPTION2, e2);
    } catch (Exception3 e3) {
        throw new CustomException("Some info3", CustomException.EXCEPTION3, e3);
    }
}
存储可丢弃的
super
调用
Exception
CustomException
的构造函数中可以避免的无意义开销?像这样:

public CustomException(String message, int type, Throwable cause){
    super(message, cause);
    this.exceptionType = type;
}
然后我就可以摆脱
guiltyException
getGuiltyException


自定义异常
类本身中存储
可丢弃的
原因有什么意义吗?没有,当可丢弃的已经拥有该功能时,没有理由自己存储原因。您的类应该只引入额外的信息,而不是重复已经有意义的字段


除此之外,我希望能够调用
getCause()
并检索原始异常-而在原始代码中,我必须知道它是一个
CustomException
,并调用
getGuiltyException()
。这种情况的一个症状是,任何记录错误的通用代码在当前版本中都看不到原因,而如果使用标准的异常链接方法,则会看到原因。

否,如果
Throwable
已经有了该功能,则没有理由自己存储原因。您的类应该只引入额外的信息,而不是重复已经有意义的字段


除此之外,我希望能够调用
getCause()
并检索原始异常-而在原始代码中,我必须知道它是一个
CustomException
,并调用
getGuiltyException()
。这种情况的一个症状是,任何记录错误的通用代码都不会在当前版本中看到原因,而如果使用标准的异常链接方法,则会看到原因。

您不需要保留对异常原因的引用,因为这可以在
super(消息,原因)中设置
constructor.

您不需要保留对异常原因的引用,因为这可以在
super(message,cause)
构造函数中设置。

关于这可能导致的日志记录问题的正确调用,甚至没有考虑到这一点。关于这可能导致的日志记录问题的正确调用,我都没想过。