爪哇 “?”用于检查 null 的运算符 - 它是什么?(不是三元的!

2022-08-31 10:03:50

我正在阅读一篇从slashdot故事链接的文章,并遇到了这个小花絮:

以最新版本的Java为例,它试图通过为无休止的指针测试提供速记语法来使空指针检查更容易。只需在每个方法调用中添加一个问号,就会自动包含对空指针的测试,从而替换 if-then 语句的 rat 巢,例如:

    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


答案 1

最初的想法来自时髦。它是作为Project Coin:https://wiki.openjdk.java.net/display/Coin/2009+Proposals+TOC(Elvis和其他Null-Safe Operators)的一部分为Java 7提出的,但尚未被接受。

相关的猫王算子 ?: 被提议作为 的简写,当 x 是一个复杂的表达式时特别有用。x ?: yx != null ? x : y


答案 2

这种语法在Java中不存在,也没有计划包含在我所知道的任何即将推出的版本中。