Нуль-безопасный вызов метода Java7

Я хочу получить подробную информацию об этой функции 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();
}

Но, откровенно говоря, это не очень понятно для меня. Пожалуйста, объясните?

Ответ 1

Нуль-безопасный вызов метода был предложен для Java 7 в составе Project Coin, но он не дошел до финальной версии.

Посмотрите все предлагаемые функции и все, что окончательно выбрано здесь - 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;
}

Я не думаю, что вы можете получить кратким и ясным, чем это. ИМХО, пытаясь объединить этот код в одну строку, сделает код менее понятным и менее читаемым.

Ответ 2

Если я правильно понимаю ваш вопрос и вы хотите сделать код короче, вы можете воспользоваться операторами короткого замыкания, написав:

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

Второе условие не будет проверяться, если первое ложно, потому что && оператор замыкает логику, когда встречает первый false.

Ответ 3

Он должен работать для вас:

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

Также проверьте этот поток: Избегайте!= нулевые утверждения