2013-08-09 12 views
10

Chcę uzyskać szczegółowe informacje na temat tego cechą Java7 jak ten kodNull-bezpieczna metoda inwokacja Java7

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

Może być coś jak to zrobić

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

ale szczerze mówiąc to nie jest dużo dla mnie jasne, .Proszę wytłumacz?

+2

Dlaczego trzeba napisać go w krótszym sposób? W pierwszym przykładzie jest to łatwe do odczytania i proste. – Kon

+1

@Kon tak, ale kto nie chce pisać małego kodu –

+1

Myślę, że propozycja została odrzucona dla Javy 7. Czy masz link do oficjalnej dokumentacji? –

Odpowiedz

13

Zaproszenie do metody Null-safe zostało zaproponowane dla Java 7 jako część Project Coin, ale nie doszło do ostatecznego wydania.

Zobacz wszystkie proponowane funkcje, a co wszystko ostatecznie został wybrany tutaj - https://wikis.oracle.com/display/ProjectCoin/2009ProposalsTOC


Jeśli chodzi o uproszczenie tej metody jest zaniepokojony, można zrobić trochę zmian bitów:

public String getPostcode(Person person) { 

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

Nie sądzę, że można uzyskać zwięzłe i wyraźniejsze niż to. IMHO, próbując scalić ten kod w jedną linię, sprawi, że kod będzie mniej przejrzysty i mniej czytelny.

+0

, więc tylko w skrócie linia kodu? –

+0

@subodh. Co przez to rozumiesz? –

+0

Czy masz na myśli, że ta funkcja nie jest dostępna w java7 i nie możemy jeszcze jej wdrożyć? –

1

Jeśli rozumiem pytanie poprawnie i chcesz aby kod krótszy, można skorzystać z operatorów zwarciowych pisząc:

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

Drugi warunek nie zostanie sprawdzone, czy pierwsza jest false, ponieważ operator & & powoduje zwarcie w logice po napotkaniu pierwszego błędu: &.

+4

Z wyjątkiem dwukrotnego oceniania 'person.getAddress()' :( – arshajii

+3

@Gamb Nie, to nie jest kwestia optymalizacji (chociaż może to również wejść w grę, jeśli 'getAddress()' trwało długo, ale prawdopodobnie nie Kod ten nie jest tym samym, co kod OP: – arshajii

+0

@Gamb Jeśli ciało 'getAddress()' zawiera znaczne ilości przetwarzania, drugie wywołanie byłoby niepożądane.Nie znając implementacji metody, nie możemy założyć o jakości optymalizacji jednego połączenia w porównaniu do dwóch połączeń. – Vulcan

0

Należy pracować dla Ciebie:

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

Sprawdź również ten wątek: Avoiding != null statements

+0

@NotNull będzie obsługiwane przez Java7 –

+0

Teraz jest poprawne. Dzięki. –

Powiązane problemy