gpt4 book ai didi

java - 如何在 getter 链中跟踪 NullPointerException

转载 作者:IT老高 更新时间:2023-10-28 20:27:08 24 4
gpt4 key购买 nike

如果我在这样的调用中收到 NullPointerException:

someObject.getSomething().getSomethingElse().
getAnotherThing().getYetAnotherObject().getValue();

我得到一个相当无用的异常文本,例如:

Exception in thread "main" java.lang.NullPointerException
at package.SomeClass.someMethod(SomeClass.java:12)

我发现很难找出哪个调用实际上返回了 null,我经常发现自己将代码重构为如下内容:

Foo ret1 = someObject.getSomething();
Bar ret2 = ret1.getSomethingElse();
Baz ret3 = ret2.getAnotherThing();
Bam ret4 = ret3.getYetAnotherOject();
int ret5 = ret4.getValue();

然后等待一个更具描述性的 NullPointerException 告诉我要查找哪一行。

你们中的一些人可能会认为连接 getter 是不好的风格,无论如何都应该避免,但我的问题是:我可以在不更改代码的情况下找到错误吗?

提示:我正在使用 eclipse,我知道调试器是什么,但我不知道如何将其应用于问题。

我对答案的结论:
一些答案告诉我,我不应该一个接一个地链接 getter,一些答案告诉我如果我不遵守该建议,如何调试我的代码。

我接受了一个答案,该答案教会了我何时链式 setter/getter :

  • 如果它们不能返回 null,则将它们链接到你喜欢的长度。无需检查 != null,无需担心 NullPointerExceptions(请注意,链接仍然违反 Demeter 法则,但我可以忍受)
  • 如果它们可能返回 null,永远不要链接它们,并检查每个可能返回 null 的 null 值

这使得任何关于实际调试的好建议都毫无用处。

最佳答案

NPE 是 Java 中最没用的异常。它似乎总是被懒惰地实现,并且从不确切地说明是什么原因造成的,即使像“x.y.Z 类为空”这样简单,在调试此类情况时也会有很大帮助。

无论如何,我发现在这些情况下找到 NPE thrower 的唯一好方法是以下重构:

someObject.getSomething()
.getSomethingElse()
.getAnotherThing()
.getYetAnotherObject()
.getValue();

你有它,现在 NPE 指向正确的线,因此正确的方法抛出了实际的 NPE。不像我想要的那样优雅的解决方案,但它确实有效。

关于java - 如何在 getter 链中跟踪 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/410890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com