Sid*_*ria 5 java nullpointerexception null-check
当我编码时,我对空检查感到沮丧.特别是在编码数据结构时!
我必须这样做
String val;
if(a != null && a.child != null)
val = a.child.getValue();
else
val = null;
Run Code Online (Sandbox Code Playgroud)
这有点......
有运营商吗?(这是C#的一部分)让Java缩短负担?
С#例子:
String val = a?.child?.getValue();
Run Code Online (Sandbox Code Playgroud)
没有
与Java中的大多数事情一样,您必须以漫长的方式进行.嘿,至少它更具可读性 - 如果你必须做一个空检查,为什么不让它明确且容易看见(在这里扮演魔鬼的拥护者)
没有?Java 中的运算符,因此,正如 Hari 所说,你必须以“冗长”的方式做事。然而,有人可能会说这是一件好事,因为它阻止了空值的使用。
例如,在OP的代码中,null如果a或其子项不存在,为什么要设置val?假设这是一个函数并且返回 val。这是一种代码味道:它只是向代码的用户提出了另一个空检查的要求。 它变成了空检查的无休止循环,完全混乱了代码并混淆了逻辑,因为维护程序员通常无法判断这是否是合法逻辑,或者偏执的前程序员正在悄悄地忽略错误。 不要模仿 PHP!。引用那篇精彩的咆哮:
“当面临做一些无意义的事情或因错误而中止时,它(PHP)会做一些无意义的事情。”
PHP 做出了一个糟糕的设计选择。 因错误而中止比做一些无意义的事情要好得多。
相反,你应该问这样的问题:
Collections.emptyXXX(),例如一个emptyList,或一个空数组。不要将 String 设置为 null ,而是考虑将其设置为空 string ""。顺便说一句,这让你变得hashCode(), equals(), and compareTo()更简单! 有时你真的不能做这些事情。参数为 null 有充分的理由,或者您必须允许向后兼容以前的不良设计或第 3 方库。IMO,这种情况应该很少见,您应该记录所发生的情况。也许您应该返回 null(或 0)以外的其他内容来反映这一点。例如
/**
countPeople
@param node null means the foobar can't connect to the database,
@return Foobar.ERR_NO_DB if node is null
*/
Run Code Online (Sandbox Code Playgroud)
在 OP 的示例中,它看起来可能是某种 XML 节点,并且 Java XML 接口非常庞大,为其中一个创建一个好的 NULL 对象将是一项艰巨的任务。(嗯,也许是一个不错的小型开源项目?)。然而,在这种情况下,您可能会拨打a.child.getValue()很多电话。编写一个小实用函数来处理这个问题并处理空值。至少它们被封装在一些实用方法中,而不是到处进行冗长的空检查。干燥。而且,可以说,检查冗长的事实鼓励您做出更好的设计。所以缺少 ?. 运营商是个好东西,对吧?:-)
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |