Optional
が空であるか、その両方が存在するかどうかわかりません。アイデアは、この時点で私に警告している、私の実際のコードでなぜIdeaは `orElseGet`の` isPresent() `チェックがないのを警告しますか?
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);
}
:
'Optional.get()' isPresent」せずに後者のケースでは、私はいつも
b
上a
を好むしたいです() 'チェック。
なぜですか? a
またはb
が存在するかどうかを事前に確認しています。また、このコードは期待通りに機能し、出力は10
です。 b = Optional.of("2")
を入力した場合、出力は10
です。これはa
が好ましいからです。 a = Optional.empty()
と入力すると、出力は期待どおり2
になります。
私は何か間違っているのですか、またはアイデアの間違っていますか?
これは 'a.isPresent()||によって混乱します。 b.isPresent() '条件があり、この状況下では' b'が存在しなければならないことがわかりません。 –
@LouisWasserman、実際には条件はうまく処理されます。 IDEAは '!a.isPresent()'は '!a.map(anything).isPresent()'(これは今は分かっていません)を意味するだけです。また、lambda/methodrefを調べ、 'null'を返さないことを理解していなければなりません(そうでなければ、警告は正しい)。それはあまりにも多くの分析ですが、おそらく将来それを行うでしょう。 –