我有这样的来源:
Exception e = new Exception("Exception");
IOException ioE = new IOException("An exception cause");
e.initCause(ioE);
我正在尝试设置异常“e”的原因,而我得到的是设置为自身的异常!
我只是不明白。我的代码有意义还是我疯了?
答案 0 :(得分:2)
我相信你在概念上误解了initCause的工作原理。请参阅Java API,它说
通常从构造函数中调用,或立即调用 在创建throwable之后。如果这个throwable是用 Throwable(Throwable)或Throwable(String,Throwable),这种方法 甚至不能被召唤一次。
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)
答案 1 :(得分:2)
似乎工作:
package com.daniel.test;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws Exception{
Exception e = new Exception("Exception");
IOException ioE = new IOException("An exception cause");
e.initCause(ioE);
throw e;
}
}
输出结果为:
Exception in thread "main" java.lang.Exception: Exception
at com.daniel.test.Test.main(Test.java:8)
Caused by: java.io.IOException: An exception cause
at com.daniel.test.Test.main(Test.java:9)
您可以看到原因设置正确。