はJavaでは、これは動作します:は、尋ねる
String foo = a();
if(foo == null){
foo = b();
}
if(foo != null){
list1.add(foo);
}
しかし、それはそれはあるかのように扱われるべきであるように見えるので、見てその醜いです/そうではありませんが、そうではありません。変数がヌルでない値に設定された後に、変数がまだヌルであるかどうかのチェックを処理するきちんとした方法はありますか?
はJavaでは、これは動作します:は、尋ねる
String foo = a();
if(foo == null){
foo = b();
}
if(foo != null){
list1.add(foo);
}
しかし、それはそれはあるかのように扱われるべきであるように見えるので、見てその醜いです/そうではありませんが、そうではありません。変数がヌルでない値に設定された後に、変数がまだヌルであるかどうかのチェックを処理するきちんとした方法はありますか?
あなたは2つのオプションがあります。foo
は、これまで "null
可能性があり、" 値が割り当てられている場合
1)Optionalクラス
// if a() returns an Optional<String>
String foo = a().orElse(b());
if (foo != null) list1.add(foo);
2)フォールバック
// With a better interface name.
interface Fallback {
// With a better method name.
String get();
}
List<Fallback> fallbacks = new ArrayList<>() {{ }}; // add all fallbacks
for (Fallback fallback : fallbacks) {
String foo = fallback.get();
if (foo != null) {
list1.add(foo);
break;
}
}
ためChain of Responsibilityパターンを、もしあなたのプログラムが問題になるのであれば、foo
はいつでもです、はい、あなたはすべての個別の割り当ての後にチェックする必要があります。これを修正するパターンはありません。
問題がコードクラッターである場合、最初の数行を関数にラップしています。
String getFoo() {
String _a = a();
if(_a != null) return _a;
else return b();
}
/*...*/
foo = getFoo();
if(foo != null)
list1.add(foo);
代わりに、あなたはそれはそれは期待しているものは何でもオブジェクトではなくnull
を渡されたところ正常ケースを処理するカスタムコンテナ(またはlist1
が何であれタイプのラッパー)を書くことができます。
OOPのアプローチは、フォールバックパターンを実装することです。有効な結果が得られるまで、すべての実装を試してみてください。また、 'Optional <>'クラス(https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html)をチェックすることもできます。 – sturcotte06
Groovyを使うことができれば、 'String foo = a()?:b()'です。 – chrylis
もし条件string foo =(a()!= null)なら避けたいのですか? a():b(); if(foo!= null){ list1.add(foo); } – Developer