Java 8では、Optional
が存在する場合にメソッドを強制的に返す方法はありますか? 私は答えがノーだと思います。しかし、次のコードでisPresent()
とget()
を使用しないようにするには?Java 8のオプションが存在する場合はメソッドが返されます
public Bar myMethod(){
if(condition){
return getOptionalFoo()
.map(Foo::getBar)
.orElseGet(() -> getOtherBar());
}
return getOtherBar();
}
しかし、今、私たちは二度getOtherBar
への呼び出しを記述するので、それは良いアイデアのように見えるしていません:
public Bar myMethod(){
if(condition){
Optional<Foo> foo = getOptionalFoo();
if(foo.isPresent()){
return foo.get().getBar();
}
}
return getOtherBar();
}
一つの解決策は、書くことだろう。これを避ける方法はありますか?
編集:私はまた
public Bar myMethod(){
//Or a ternary operator but there are hard to read when they make long lines
Optional<Foo> foo;
if(condition){
foo = getOptionalFoo();
} else {
foo = Optional.empty();
}
return foo.map(Foo::getBar)
.orElseGet(() -> getOtherBar());
}
考えるしかし、ここで問題は、我々はそれに役に立たない空Optional
とチェーンのメソッドを作成することです。条件が時間の99%に満たない場合は、元のコードよりも効率が悪くなります(特に、複数の場合はmap()
とfilter()
)。
注:実際に私たちのコードでは、他の呼び出し(fooに依存する)の結果に依存するより多くの条件があります。
これらの2つの方法の間にコンパイラとの違いはありません。アプリケーションでこれらの両方を使用することはできません –
@rabbitguy私はあなたのステートメントを理解していません – Ricola