2011-08-03 25 views
2

このjavaを構築すると単純化できますか?あまりにも冗長で、私はそれをもっと短くしたいと思っています。java if文を簡略化

Aは永続オブジェクトです。コンテキストは最初にアクセスされるとnullになります。 Aよりもinstatniatedやコンテンツを与え、これが失敗した場合、いくつかのバックアップコンテンツが

if (objA == null) { 
    objA = getAInstance(); 

} 

がにチャールズによって提案されたコードをカプセル化するファクトリメソッドであなたの建物のロジックを入れA.

if (A == null) { 
    A = staticGetMethod(); 
    if (A == null) A = new BackupAContent() { ... }; 
} 
+4

私はそれを完全に読みやすく、冗長ではありません。何も変更しないでください。 –

+0

答えはどれですか? –

答えて

3

に与えられていますメソッドを実装するFactory_method_pattern

+0

私は理解していない、getAInstance()メソッドを解読できますか? –

+0

更新を参照

5

更新:また、ネストも同じように動作するので、単にネストを削除することもできます。

if (A == null) { 
    A = staticGetMethod(); 
} 
if (A == null) { 
    new BackupAContent() { ... }; 
} 

動作するはずです:

if (A == null && (A = staticGetMethod()) == null) { 
    new BackupAContent() { ... }; 
} 
+0

これは、元の構成とは異なる何かをするでしょう、それはA!= nullでもstaticMethodを呼び出します。 –

+0

少なくとも私の意見では、なぜこれが悪い考えであるかを示すオリジナルと間違いよりはるかに不合理です:) – Voo

+4

恐ろしいコードです - そのような文の途中に代入を入れないでください! –

0

あなたが代わりにif文の三項演算子を使用することができます。

a = a ? a : staticGetMethod(); 
a = a ? a : new BackupAContent(); 

私はあなたが「何に固執したい、と述べました私はステートメントをインラインで置くのではなく、2番目の条件付きブロックを追加することを除いて正直であるそれ。

0

これは、わずかな変化とチャールズ・グッドウィンのコードです:

if (A == null && (A = staticGetMethod()) == null) { 
new BackupAContent() { ... }; 
} 

私が使用して、代わりに私は、これはそれを行うための最善の方法だと思いOR

0

の:

if(A == null) 
{ 
    if((A = staticGetMethod()) == null) A = new BackupAContent() { ... }; 
}