gen*_*eek 2 java optional guava
我有一个我不拥有的方法,返回null但返回类型是Optional <Boolean>.当我调用x.IsPresent()时它会抛出(场景#2).我尝试将方法包装在fromNullable中但是我得到了类型不匹配(下面的屏幕截图).我如何修复,以便IsPresent()不抛出?
import com.google.common.base.Optional;
private Optional<Boolean> get_I_dontHaveControlOverThisMethod () {
return null; // Ooops!
}
// Compile error? -----------------------> vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
Optional<Boolean> x = Optional.fromNullable(get_I_dontHaveControlOverThisMethod());
// (#1) Optional<Boolean> x = Optional.fromNullable(null); // <- this work fine
// (#2) Optional<Boolean> x = get_I_dontHaveControlOverThisMethod();
if (x.isPresent()) { // <- this blows up! NPE when (#2) runs
// non-null good value;
}
Run Code Online (Sandbox Code Playgroud)
使用
Optional<Boolean> x = get_I_dontHaveControlOverThisMethod();
if(x == null) x = Optional.absent();
Run Code Online (Sandbox Code Playgroud)
如果你经常调用这样的方法,你可以将它包装成函数:
static <T> Optional<T> safeOptional(Optional<T> optional) {
return optional == null ? Optional.absent() : optional;
}
Run Code Online (Sandbox Code Playgroud)
并使用:
Optional<Boolean> x = safeOptional(get_I_dontHaveControlOverThisMethod());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
711 次 |
最近记录: |