如果在这样的调用中收到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,该异常告诉我要查找的行。
你们中的某些人可能会认为,连接吸气剂是不好的风格,无论如何都应避免,但是我的问题是:我可以在不更改代码的情况下找到错误吗?
提示:我正在使用eclipse,我知道什么是调试器,但是我无法弄清楚如何将其应用于问题。
我对答案的结论:
有些答案告诉我,我不应该一个接一个地链接获取器,有些答案说明了如果我不遵守该建议,该如何调试代码。
我接受了一个答案,该答案教会了我何时绑定吸气剂的确切时间:
这使有关实际调试的任何好的建议都没有用。
答案取决于您如何查看吸气剂(的合同)。如果他们可能返回null
,则应每次真正检查返回值。如果该getter不应该返回null
,则该getter应该包含一个检查并抛出一个异常(IllegalStateException
?)而不是null
return,您应保证永不返回。stacktrace将指向您确切的getter。您甚至可以将获取器的异常状态置于异常消息中。
问题内容: 有人可以帮助我迅速了解正确使用吸气剂和吸气剂的方法。我对它的印象与说Java不一样。 这是Swift中用于存储和访问类变量的正确用法吗? 问题答案: 斯威夫特提供了更结构化的方法来和比Java。 你可以,但你应该 不会 ,写getter和setter方法就像你在你的代码一样。 相反,(如果您使用)只需声明可见性为non的属性即可(例如,在我的示例中)。这样,您班级外的呼叫者将可以查看属
问题内容: 我在读这篇文章,了解为什么和邪恶。本文没有说过 不要 使用它们,而是告诉您以限制使用这些方法的方式进行思考,或者引用该文章: 不要要求您进行工作所需的信息;询问具有信息的对象为您完成工作。 当您需要在GUI中显示数据但没有getter方法时会发生什么?本文简要介绍了这一点,但并不完整。它提到将JComponent传递给类,但是如果您要进行GUI更改,则可能需要进行很多工作才能修复。 例
我按照时间表使用VUE,我对VUE和JS非常陌生。我创建了VUE组件,它将一些新属性添加到已经处于状态的对象中,然后我将这个对象与getter一起呈现在我的另一个VUE组件中,但不幸的是,新属性仅在重新加载后呈现。这是我添加新属性的组件片段 这是国务院的一个片段 以下是操作 这是突变,它完成了所有的工作 吸气剂 这里是计算属性,它从getters中获取时间表 所以问题是我不能使吸气剂反应,但我看到
问题内容: 我知道Java中关于布尔型getter的约定包括前缀“ is”。 但是,如果主题是复数呢?也就是说,如果我不想知道某个商店是否已营业,而又想知道所有商店是否已营业怎么办? 用英语没有意义。 我很想写这样的getter: 我认为这是有意义的,但我一直在别人告诉我,我应该只是吮吸它,抛弃主题动词协议和使用,,。 无论如何,对于在复数主题上运算的布尔型吸气剂,我该怎么办? 问题答案: 我不记
问题内容: 我有一堂课,看起来像下面这样: 我的hibernate映射文件按如下所示映射属性: 我收到以下错误: 看来hibernate不喜欢我的大写字母。我该如何解决? 问题答案: 应该管用…
但是仅仅从使用的角度来看,就像在指南中一样,以下两者之间的区别在哪里 从这个答案中我可以看出,对于getter重写,该值没有存储。getter覆盖与赋值有什么不同吗?也许是代表或者拉丁裔?