简化java if语句

简化java if语句,java,if-statement,verbosity,Java,If Statement,Verbosity,我可以简化这个java if构造吗?我觉得太冗长了,我想把它缩短一点 是持久对象,如果第一次访问它的上下文,它将为null。然后A将安装并提供内容,如果安装失败,则会向A提供一些备份内容 if (A == null) { A = staticGetMethod(); if (A == null) A = new BackupAContent() { ... }; } 将您的构建逻辑放在工厂方法中 if (objA == null) { objA = getAInstan

我可以简化这个java if构造吗?我觉得太冗长了,我想把它缩短一点

是持久对象,如果第一次访问它的上下文,它将为null。然后A将安装并提供内容,如果安装失败,则会向A提供一些备份内容

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

将您的构建逻辑放在工厂方法中

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

}

将Charles建议的代码封装到一个方法中以实现更新:

,或者您可以简单地删除嵌套,因为它的行为方式仍然相同

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

应:

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

您可以使用三元运算符代替
if
语句:

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

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

这是Charles Goodwin的代码,有一点改动:

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

我使用了AND而不是OR,我认为这是最好的方法:

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

我觉得它完全可读,一点也不冗长。不要改变任何东西。这些都不是答案吗?这将做一些与原始构造不同的事情,它将调用staticMethod,即使A!=至少,在我看来,它比原始和错误更难看,这说明了为什么这是一个坏主意:它会起作用,但它是可怕的代码——请不要把任务放在这样的语句中间!我认为这本书的可读性和最差(风格)都不如原著,我同意,但他想简化它,这是我在不重构的情况下能想到的唯一方法。。。我不明白,你能描述一下getAInstance()方法吗?