【发布时间】:2011-05-22 08:48:47
【问题描述】:
我正在阅读与 slashdot 故事相关的文章,偶然发现了这个小花絮:
获取最新版本的 Java,其中 尝试进行空指针检查 通过提供速记语法更容易 用于无休止的指针测试。只是 为每个方法添加一个问号 调用自动包含一个 测试空指针,替换 if-then 语句的老鼠巢,例如 作为:
public String getPostcode(Person person) { String ans= null; if (person != null) { Name nm= person.getName(); if (nm!= null) { ans= nm.getPostcode(); } } return ans }有了这个:
public String getFirstName(Person person) { return person?.getName()?.getGivenName(); }
我搜索了互联网(好吧,我花了至少 15 分钟在谷歌上搜索“java 问号”的变体)但一无所获。所以,我的问题是:有这方面的官方文件吗?我发现 C# 有一个类似的运算符(“??”运算符),但我想获取我正在使用的语言的文档。或者,这只是我使用的三元运算符从未见过。
谢谢!
编辑:文章链接:http://infoworld.com/d/developer-world/12-programming-mistakes-avoid-292
【问题讨论】:
-
能否给我们至少一个文章的链接?
-
那sn-p的来源呢?
-
文章有误。 infoworld.com/print/145292 我相信已经提交了 Project Coin 提交。但它没有被选中(由于文章中提到的原因 - 如果你想做那种事情,请使用 C# 或其他东西),并且肯定不在 Java 语言的当前版本中。
-
这和C#不一样??操作员: ??合并空值,即
A ?? B == (A != null) ? A : B。如果对象引用不为空,即A?.B == (A != null) ? A.B : null,这似乎会评估对象的属性。 -
@Erty:作为@NotNull 注释的大用户,我编写的代码中基本上无处不在,我不太清楚NPE 是什么(除非使用糟糕的设计API) .然而,我发现这种“快捷符号”既可爱又有趣。当然,这篇文章是正确的:毕竟,它并没有消除问题的根源:由于快速和松散的编程导致空值的泛滥。 'null' 不存在在 OOA/OOD 级别。这是另一个几乎可以解决的 Java 特有的废话。对我来说,@NotNull 无处不在。