Bla*_*ght 5 java optional java-8
假设我不知道一个Optional是空的,还是两个都存在.在后一种情况下,我总是想喜欢a过b:
final Optional<String> a = Optional.of("1");
final Optional<String> b = Optional.empty();
if (a.isPresent() || b.isPresent()) {
// prefer a over b
Integer result = a
.map(s -> s + "0")
.map(Integer::parseInt)
.orElseGet(() -> Integer.parseInt(b.get())); // <-- warning for b.get()
System.out.println(result);
}
Run Code Online (Sandbox Code Playgroud)
在我的真实代码中,Idea在此时警告我:
'Optional.get()'没有'isPresent()'检查.
这是为什么?我priorly检查,如果任一a或b存在.此外,此代码按预期工作,输出为10.如果我把b = Optional.of("2")输出仍然10是因为我更喜欢a.如果我然后放a = Optional.empty(),输出是2预期的.
我做错了什么,或者是Idea的错误?
这里的想法很混乱,它的内部规则可能假设检查isPresent在同一个可选链中。
这显然不属于Optional检查本身,因为(a.isPresent() || b.isPresent());由于这些检查,不可能告诉您无法调用orElseGet空可选...b
| 归档时间: |
|
| 查看次数: |
941 次 |
| 最近记录: |