将消息添加到现有NullPointerException

时间:2015-09-17 08:45:20

标签: java exception-handling nullpointerexception throwable

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

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

有没有办法将消息添加到现有的NullPointerException?我不能只创建一个新的Exception,因为我需要stacktrace等等。

我的想法是创建一个像这样的新例外:

new Exception("the message", myNullPointer);

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

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

但是我需要它来保持NullPointerException:

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

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

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

4 个答案:

答案 0 :(得分:3)

正如评论中指出的那样,这可能不是一个好主意(特别是因为在某些您不期望的情况下可能会出现空例外。

你可以做到这一点

try {
    ..potentiall throws exceptions...
} catch (Exception e) {
    RuntimeException re = new RuntimeException(e);
    re.setStackTrace(e.getStackTrace());
    throw re;
}

答案 1 :(得分:0)

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

答案 2 :(得分: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();
}

答案 3 :(得分:0)

我希望你看到这个:

public class NPException extends RuntimeException{

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

}

然后尝试:

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

会给你一些类似的东西:

  

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