キショールチャンドラン:
オプションでoptional.orElseメソッドが呼び出している間、関係なく、要素のorElse部分は、それがあれば、他の条件のように動作しませんが実行されて存在していますか。
コードの下であなたが見ている場合ケース1 getNullPoJoが空のオプションを返しますので、getNullPoJoとgetDefaultPoJoの両方が実行されます
中ケース2あなたがgetDefaultPoJoが実行されても(getLoadedPoJoから)ロードされた値とオプションを取得します
私はちょうどoptional.orElseの動作を理解しようとしています。
public static void main (String [] a) {
PoJo poJo1=getNullPoJo().orElse(getDefaultPoJo());//Case 1
System.out.println("pojo1 Got "+poJo1.getVariable());
PoJo poJo2=getLoadedPoJo().orElse(getDefaultPoJo());//Case 2
System.out.println("pojo2 Got "+poJo2.getVariable());
}
private static Optional<PoJo> getNullPoJo() {
System.out.println("Executing getNullPoJo");
Optional<PoJo> optional=Optional.empty();
return optional;
}
private static Optional<PoJo> getLoadedPoJo() {
System.out.println("Executing getLoadedPoJo");
PoJo poJo =new PoJo();
poJo.setVariable("Loaded");
Optional<PoJo> optional=Optional.of(poJo);
return optional;
}
private static PoJo getDefaultPoJo() {
System.out.println("Executing getDefaultPoJo");
PoJo poJo =new PoJo();
poJo.setVariable("Default");
return poJo;
}
電流出力は次のようになります。
getNullPoJoを実行
getDefaultPoJoを実行
pojo1ガットデフォルト
getLoadedPoJoを実行
getDefaultPoJoを実行
pojo2ガットがロード
私の予想される出力は次のようになります。
getNullPoJoを実行
getDefaultPoJoを実行
pojo1ガットデフォルト
getLoadedPoJoを実行
pojo2ガットがロード
私は中getDefaultPoJoへの呼び出しをしたくないケース2
彼らは次のとおりでした:
使用orElseGet()
評価を避けるためにgetDefaultPoJo()
する場合Optional
、空ではありません。
PoJo poJo1=getNullPoJo().orElseGet(() -> getDefaultPoJo());
PoJo poJo2=getLoadedPoJo().orElseGet(() -> getDefaultPoJo());