Hen*_*yen 7 java generics optional java-8
我正在使用Java 1.8.0_151并且有一些代码无法编译,我不明白:
Optional optional = Optional.of("dummy");
Optional<Boolean> result1 = optional.map(obj -> true); // works fine
boolean result2 = result1.orElse(false); // works fine
boolean result3 = optional.map(obj -> true).orElse(false); // compilation error: Incompatible types: required boolean, found object
Object result4 = optional.map(obj -> true).orElse(false); // works fine
Run Code Online (Sandbox Code Playgroud)
为什么它工作正常,result1但给出编译错误result3?
附加信息:
Optional到Optional<String>,result3也能够编译result3分成2行:喜欢result1和result2,result3能够编译 一旦你失去了类型的安全性 - 它也会因链式通话而丢失.那是Optional<Object> != Optional.所以,当你这样做
Optional optional = Optional.of("dummy");
optional.map()
Run Code Online (Sandbox Code Playgroud)
在map只能接受一个原始Function,没有别的,它会返回一个Object明显.
正确的方法是添加类型信息:
Optional<String> optional = Optional.of("dummy");
Run Code Online (Sandbox Code Playgroud)
或者你可以不安全地投射:
boolean result3 = (boolean) optional.map(obj -> true).orElse(false)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |