このjavaif構文を単純化できますか?冗長すぎるようです。短くしたいと思います。
Aは永続オブジェクトであり、そのコンテキストに初めてアクセスした場合はnullになります。Aよりもインスタンス化され、コンテンツが提供されます。これが失敗した場合、一部のバックアップコンテンツがAに提供されます。
if (A == null) {
A = staticGetMethod();
if (A == null) A = new BackupAContent() { ... };
}
このjavaif構文を単純化できますか?冗長すぎるようです。短くしたいと思います。
Aは永続オブジェクトであり、そのコンテキストに初めてアクセスした場合はnullになります。Aよりもインスタンス化され、コンテンツが提供されます。これが失敗した場合、一部のバックアップコンテンツがAに提供されます。
if (A == null) {
A = staticGetMethod();
if (A == null) A = new BackupAContent() { ... };
}
更新:または、同じように動作するため、ネストを削除することもできます。
if (A == null) {
A = staticGetMethod();
}
if (A == null) {
new BackupAContent() { ... };
}
動作するはずです:
if (A == null && (A = staticGetMethod()) == null) {
new BackupAContent() { ... };
}
構築ロジックをファクトリメソッドに入れます
if (objA == null) {
objA = getAInstance();
}
Charlesによって提案されたコードをFactory_method_patternを実装するメソッドにカプセル化します
if
ステートメントの代わりに三項演算子を使用できます。
a = a ? a : staticGetMethod();
a = a ? a : new BackupAContent();
とは言っても、正直に言うと、私はあなたが持っているものに固執します-ステートメントをインラインにするのではなく、2番目の条件にブロックを追加することを除いて.
これは、Charles Goodwin のコードにわずかな変更を加えたものです。
if (A == null && (A = staticGetMethod()) == null) {
new BackupAContent() { ... };
}
OR の代わりに AND を使用しました
これが最善の方法だと思います:
if(A == null)
{
if((A = staticGetMethod()) == null) A = new BackupAContent() { ... };
}