11

我想获取有关 Java7 的此功能的详细信息,例如此代码

public String getPostcode(Person person)
{
    if (person != null)
    {
        Address address = person.getAddress();
        if (address != null)
        {
            return address.getPostcode();
        }
    }
    return null;
}

可以做这样的事情

public String getPostcode(Person person)
{
    return person?.getAddress()?.getPostcode();
}

但坦率地说,我不太清楚。请解释一下?

4

4 回答 4

14

作为 Project Coin 的一部分,Java 7 提出了 Null-safe 方法调用,但它没有进入最终版本。

查看所有提议的功能,以及最终在此处选择的所有功能 - https://wikis.oracle.com/display/ProjectCoin/2009ProposalsTOC


就简化该方法而言,您可以进行一些更改:

public String getPostcode(Person person) {

    if (person == null) return null;
    Address address = person.getAddress();
    return address != null ? address.getPostcode() : null;
}

我认为没有比这更简洁明了的了。恕我直言,试图将该代码合并到一行中,只会使代码不那么清晰和可读性降低。

于 2013-08-09T17:57:35.610 回答
1

如果我正确理解您的问题并且您想让代码更短,您可以通过编写以下代码来利用短路运算符:

if (person != null && person.getAddress() != null)
    return person.getAddress().getPostCode();

如果第一个条件为假,则不会检查第二个条件,因为 && 运算符在遇到第一个时会短路逻辑false

于 2013-08-09T17:58:26.910 回答
0

它应该适合你:

public String getPostcode(Person person) {
    return person != null && person.getAddress() != null ? person.getAddress().getPostcode() : null;
}

还要检查这个线程:避免!= null statements

于 2013-08-09T18:01:09.593 回答
0

如果你想避免调用 getAddress 两次,你可以这样做:

Address address;
if (person != null && (address = person.getAddress()) != null){
      return address.getPostCode();
}
于 2018-07-17T13:18:47.477 回答