2013-08-09 5 views
10

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

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

+2

Зачем вам нужно, чтобы записать его в более короткий путь? В первом примере это легко прочитать и просто. – Kon

+1

@Kon да, но кто не хочет писать небольшой код –

+1

Я думаю, что предложение отклонено для Java 7. У вас есть ссылка на официальную документацию? –

ответ

13

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

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

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

+0

, так что только для короткой строки кода? –

+0

@subodh. Что ты имеешь в виду? –

+0

Вы имеете в виду эту функцию, недоступную с java7, и мы пока не можем ее реализовать? –

1

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

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

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

+4

За исключением того, что вы оцениваете 'person.getAddress()' дважды :( – arshajii

+3

@Gamb Нет, это не вопрос оптимизации (хотя это может также вступить в игру, если 'getAddress()' занимает много времени, но, по-видимому, это не так). Этот код не совпадает с кодом OP. – arshajii

+0

@ Gamb Если тело 'getAddress()' подразумевает значительные объемы обработки, второй вызов будет нежелательным. Не зная о реализации метода, мы не можем делать предположений о качестве оптимизации одного вызова по сравнению с двумя вызовами. – Vulcan

0

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

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

Также проверьте эту тему: Avoiding != null statements

+0

@NotNull будет поддерживаться Java7 –

+0

Теперь все правильно. Благодарю. –

Смежные вопросы