2

我可以简化这个 java if 构造吗?对我来说似乎太冗长了,我希望它更短。

A 是持久对象,如果第一次访问它的上下文,它将为空。然后 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();

也就是说,老实说,我会坚持你所拥有的——除了我会为第二个条件添加一个块,而不是将语句与它内联。

于 2011-08-03T13:35:14.597 回答
0

这是查尔斯古德温的代码,略有改动:

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

我使用 AND 而不是 OR

于 2011-08-03T14:05:20.140 回答
0

我认为这是最好的方法:

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