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)
构造函数中设置。关于这可能导致的日志记录问题的正确调用,甚至没有考虑到这一点。关于这可能导致的日志记录问题的正确调用,我都没想过。