2013-08-12 4 views
2

У меня есть такой кусок кода:Что значит?. в Java?

private String getUsername(PersonalAccount account) { 
    User usr = (User)account?.usr 
    String name = usr?.getName() 
    return name 
} 

А в классе PersonalAccount у нас есть поле:

SimpleUser usr 

Пользователь расширяет SimpleUser

Что значит это?. в этих двух строках?

User usr = (User)account?.usr 
    String name = usr?.getName() 
+0

Это недопустимо Java. – SLaks

+0

и компилируется? – AlexWien

+1

не уверен, но кажется таким же, как 'obj! = Null? obj.property: null' – ogzd

ответ

5

Это не Ява, это Groovy. Если бы это была Java, у вас были бы точки с запятой, заканчивающие каждое утверждение.

Метод возвращает имя пользователя в переданной учетной записи или null, если учетная запись равна null, или если пользователь имеет значение NULL.

Используется the safe-navigation operator. Оператор безопасной навигации оценивает значение null, если операнд имеет значение null, в противном случае оценивает результат вызова метода. Таким образом, если у вас есть вызов метода на то, что может быть нулевым, вам не нужно беспокоиться о получении исключения NullPointerException.

+6

@ paulsm4: Wrong. Было решено не включаться в язык; с Java 7 оператор '? .' не является частью языка. Изменить для добавления: на самом деле ваша ссылка * very * говорит, что в верхней части документа: «* Эта функция была удалена из окончательного списка функций, который включен в Java 7. *« – jason

+0

@Nathan Hughes: вы решили моя загадка. Благодаря! – mattis

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