有没有?.运算符来执行 Java 执行空指针检查?
当我编码时,我对空检查感到沮丧。特别是在编码数据结构时!
我必须这样做
String val;
if(a != null && a.child != null)
val = a.child.getValue();
else
val = null;
有点像这个...
有没有像?(这是C#的一部分)对于Java来说缩短了负担?
示例:
String val = a?.child?.getValue();
当我编码时,我对空检查感到沮丧。特别是在编码数据结构时!
我必须这样做
String val;
if(a != null && a.child != null)
val = a.child.getValue();
else
val = null;
有点像这个...
有没有像?(这是C#的一部分)对于Java来说缩短了负担?
示例:
String val = a?.child?.getValue();
不
与Java中的大多数事情一样,你必须以冗长的方式去做。嘿,至少它更具可读性 - 如果你必须做一个空检查,为什么不让它明确和容易看到(在这里扮演魔鬼的倡导者)
没有?在Java中,所以,正如Hari所指出的那样,你必须以“冗长”的方式做事。但是,有人可能会说这是一件好事,因为它不鼓励使用nulls。
例如,在OP的代码中,为什么要将val设置为如果不存在或它的子级?让我们假设这是一个函数,并且返回 val。这是一种代码异味:它只是将另一个空检查的要求推送给代码的用户。它变成了一个无休止的空值检查循环,完全混乱了代码并混淆了逻辑,因为维护程序员通常无法判断这是否是合法的逻辑,或者偏执的前程序员正在悄悄地忽略错误。不要模仿 PHP!。引用那句精彩的咆哮:null
“当面对做一些荒谬的事情或因错误而中止时,它(PHP)会做一些荒谬的事情。
PHP做出了一个可怕的设计选择。与做一些荒谬的事情相比,中止错误要好得多。
相反,你应该问这样的问题:
Collections.emptyXXX()
""
hashCode(), equals(), and compareTo()
有时你真的做不到这些事情。参数为 null 是有正当理由的,或者您必须允许与以前的不良设计或第三方库向后兼容。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
*/
在OP的例子中,看起来可能是某种XML节点,Java XML接口很大,为其中一个创建一个好的NULL对象将是一项艰巨的任务。(嗯,也许是一个很好的小开源项目?但是,在这种情况下,您可能会打电话给很多。编写一个小的实用程序函数来处理这个问题并处理空值。而不是到处进行冗长的空检查,至少它们被封装在一些实用程序方法中。干。而且,可以说,检查是冗长的,鼓励你做一个更好的设计。所以缺乏?操作员是一件好事,对吧?:-)a.child.getValue()