【问题标题】:How to throw a null pointer exception and where [duplicate]如何抛出空指针异常以及在哪里[重复]
【发布时间】:2016-01-06 00:20:48
【问题描述】:

当我有一个潜在的空输入时……最好总是检查它:

public void doSomething(String str) {

    if (str == null)
        throw new NullPointerException();


    processData(str);
}

或者传递无效数据,等待“processData()”抛出nullPointerException:

public void doSomething(String str) {       

    processData(str);
}

【问题讨论】:

  • 这取决于 - 如果 processData 是一个内部函数(不能作为公共接口访问),它可能不会进行空指针检查。即使有,也取决于您在 processData 之前是否有需要运行的代码。
  • 我认为,需要先检查,如果不是 NULL 则继续。这样将来任何进一步的修改都会发生在其他模块上,不会受到空指针的影响。
  • 还有一些非空参数的注解。但趋势似乎通常假设非空。在 java 8 中,使用 Optional<String> 表示可能缺失的值。所以一个 javadoc 注释就足够了。
  • 这对我来说似乎不是重复的。

标签: java exception-handling


【解决方案1】:

这是固执己见,但恕我直言,最好把它放在第一层:

如果您获得 stracktrace 并在库实现中看到 NPE(深层),则不清楚它是由库中的错误还是由您的非法参数引起的。

出于同样的原因,我建议使用描述性 IllegalArgumentException 而不是 NPE:

if (str == null)
    throw new IllegalArgumentException("str is null");

(也给str 起一个更好的名字)。

【讨论】:

  • 我只是想补充一下,上面的代码可以改写为Objects.requireNonNull(str,"str is null");
猜你喜欢
  • 2018-08-14
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2020-08-10
  • 2013-03-21
  • 1970-01-01
相关资源
最近更新 更多