Yul*_*iri 3 java generics guava
在我用过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 ( );
}
Run Code Online (Sandbox Code Playgroud)
和编译器给我错误:
无法从Optional <Object>强制转换为Optional <User>
更多关于这方面的工作:
Optional< User > empty = Optional.absent ( );
return success == true ? Optional.of( user ) : empty;
Run Code Online (Sandbox Code Playgroud)
如何逃避创建空变量?
在条件运算符的情况下,这是类型推断的已知错误.Java泛型不会从返回类型中推断出某些类型.解决方法是提供显式类型参数:
return success == true ? Optional.of( user ) :Optional.<User>absent ( );
Run Code Online (Sandbox Code Playgroud)
哦,请摆脱== true
.这根本不是必需的.另外,其他条件运算符:
boolean success = ( user == null ) ? false
: user.password.equals( request.password );
Run Code Online (Sandbox Code Playgroud)
可以替换为:
boolean success = (user != null) && user.password.equals( request.password )
Run Code Online (Sandbox Code Playgroud)
好吧,似乎我的猜测是正确的;-)所以这里作为官方答案:
Optional.<User>absent()
顺便说一句,为了简洁起见,你可以减少到:
return success ? Optional.of( user ) :Optional.<User>absent ( );