2

このjavaif構文を単純化できますか?冗長すぎるようです。短くしたいと思います。

Aは永続オブジェクトであり、そのコンテキストに初めてアクセスした場合はnullになります。Aよりもインスタンス化され、コンテンツが提供されます。これが失敗した場合、一部のバックアップコンテンツがAに提供されます。

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

5 に答える 5

5

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

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

動作するはずです:

if (A == null && (A = staticGetMethod()) == null) {
    new BackupAContent() { ... };
}
于 2011-08-03T13:24:32.997 に答える
3

構築ロジックをファクトリメソッドに入れます

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

}

Charlesによって提案されたコードをFactory_method_patternを実装するメソッドにカプセル化します

于 2011-08-03T13:24:10.090 に答える
0

ifステートメントの代わりに三項演算子を使用できます。

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

とは言っても、正直に言うと、私はあなたが持っているものに固執します-ステートメントをインラインにするのではなく、2番目の条件にブロックを追加することを除いて.

于 2011-08-03T13:35:14.597 に答える
0

これは、Charles Goodwin のコードにわずかな変更を加えたものです。

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

OR の代わりに AND を使用しました

于 2011-08-03T14:05:20.140 に答える
0

これが最善の方法だと思います:

if(A == null)
{
    if((A = staticGetMethod()) == null) A = new BackupAContent() { ... };
}
于 2011-08-03T14:46:39.713 に答える