1

我在我的方法中捕获了不同类型的异常。

如果异常是 a NullPointerException,我想向现有异常添加一条消息。

有没有办法向现有的 NullPointerException 添加消息?我不能只创建一个新异常,因为我需要堆栈跟踪等。

我的想法是像这样创建一个新的异常:

new Exception("the message", myNullPointer);

但是,输出不是我需要的,因为那样,我的堆栈跟踪看起来像这样:

java.lang.Exception:
...bla
...bla

但我需要它来保持 NullPointerException 像这样:

java.lang.NullPointerException:
...bla
...bla

同样重要的是,我无法访问创建初始 NullPointer 的部分。所以我不能在开始时添加消息。

编辑:我知道我应该避免 NPE。但是我必须影响抛出的NPE。所以我必须做出反应。

4

4 回答 4

3

正如评论中所指出的,这可能不是一个好主意(特别是因为空异常可能是由于某些您没想到的情况而出现的。

永远不要像这样完全做你想做的事

try {
    ..potentiall throws exceptions...
} catch (Exception e) {
    RuntimeException re = new RuntimeException(e);
    re.setStackTrace(e.getStackTrace());
    throw re;
}
于 2015-09-17T08:52:40.777 回答
0

我很确定,按照你的建议在构造函数中传递你原来的异常是你能做的最好的。或者,您可以使用它.getCause()来确定异常的原因。这样您就可以为自己构建一个更有意义的输出,例如手动记录它。

于 2015-09-17T08:51:23.607 回答
0

您需要调用 getCause() 来检索您的NPE

String nullString = null;
try {
  nullString.split("/");
} catch (NullPointerException e) {
  Exception ex = new Exception("Encapsulated", e);

  System.out.println("Direct Stacktrace");
  ex.printStackTrace();

  System.out.println("With getCause");
  ex.getCause().printStackTrace();
}
于 2015-09-17T08:55:43.073 回答
0

我希望你正在看这个:

public class NPException extends RuntimeException{

    public NPException(String message, Throwable exception){
        super(message, exception);
    }

}

然后尝试:

throw new NPException("TEsting..", new NullPointerException().getCause());

会给你类似的东西:

线程“主”NPException 中的异常:在 Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 的 Test.main(Test.java:151) 处的 TEsting..

于 2015-09-17T08:55:47.410 回答