意外的initCause行为我无法克服

时间:2012-03-28 00:02:57

标签: java

我有这样的来源:

    Exception e = new Exception("Exception");
    IOException ioE = new IOException("An exception cause");
    e.initCause(ioE);

我正在尝试设置异常“e”的原因,而我得到的是设置为自身的异常!

我只是不明白。我的代码有意义还是我疯了?

2 个答案:

答案 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)

您可以看到原因设置正确。