Created 2020年6月18日11:05
Updated 2020年6月18日11:26
Categories
Java
nullableMethod1
がnullだったら nullableMethod2
の値を返すプログラムを書きました。
String str = Optional.ofNullable(some.nullableMethod1()).orElse(some.nullableMethod2());
nullableMethod1
で値を返して、 nullableMethod2
が呼ばれていないことを確認するテストを書きました。
when(some.nullableMethod1).thenReturn("testStr");
verify(some, never()).nullableMethod2();
しかし結果は失敗。 nullableMethod2
が何故か呼ばれています。
orElseの中身が実行前に評価されていたことが原因でした。
つまり、nullableMethod1
の実行時に予めnullableMethod2
の結果も準備して、nullableMethod1
がnullだったら返すみたいな動作になっていました。
評価される順番を考えたらそれはそうなのですが、そこまで頭が回らずハマってしまいました。
代わりにorElseGetを使うと、後から評価するように書くことができます。
String str = Optional.ofNullable(some.nullableMethod1()).orElseGet(() -> some.nullableMethod2());