2014-02-15 2 views
3

В проекте, над которым я работал в i guava library. у меня есть что-то вроде этого:Как отбрасывать статические общие функции в java, которые не принимают параметры?

Optional<User> loginUser() { 
    User user = storage.get(request.id); 

    boolean success = (user == null) ? 
      false : user.password.equals(request.password); 

    return success == true ? Optional.of(user) :Optional.absent (); 
} 

и компилятор дает мне ошибку:

не может бросить из Факультативным < Object> до Необязательные < пользователя>

Больше здесь есть работа вокруг этого произведения:

Optional<User> empty = Optional.absent (); 
return success == true ? Optional.of(user) : empty; 

Как я могу избежать создания пустой переменной?

+3

(не используя Guava, но я полагаю :) 'Необязательно. отсутствует() ' – qqilihq

+1

@qqilihq, это ответ;) – fge

ответ

8

Это known bug с типом inferencing в случае условного оператора. Java generics не выводит типы из возвращаемого типа как-то. Чтобы обойти эту проблему, чтобы дать явный аргумент типа:

return success == true ? Optional.of(user) :Optional.<User>absent (); 

О, и, пожалуйста, избавиться от == true. Это просто не требуется. Кроме того, другой условный оператор:

boolean success = (user == null) ? false 
            : user.password.equals(request.password); 

можно заменить:

boolean success = (user != null) && user.password.equals(request.password) 
6

Хорошо, кажется, мое предположение было верно ;-) Так что, чтобы иметь его в качестве официального ответа здесь:

Optional.<User>absent()

Btw, для краткости, можно свести к:

return success ? Optional.of(user) :Optional.<User>absent ();

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