在我用过guava库的项目中。 我有这样的事情:
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 ( );
}
和编译器给我错误:
无法从Optional&lt; <对象&gt;到可选&lt;用户&gt;
这里有更多可行的方法:
Optional< User > empty = Optional.absent ( );
return success == true ? Optional.of( user ) : empty;
如何逃避创建空变量?
答案 0 :(得分:8)
这是known bug,在条件运算符的情况下具有类型推断。 Java泛型不会从返回类型中推断出某些类型。解决方法是提供显式类型参数:
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 )
答案 1 :(得分:6)
好吧,似乎我的猜测是对的;-)所以在这里作为官方答案:
Optional.<User>absent()
return success ? Optional.of( user ) :Optional.<User>absent ( );