【问题标题】:Simplify java if statement简化 java if 语句
【发布时间】:2011-08-03 13:22:30
【问题描述】:

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

A 是持久对象,如果第一次访问它的上下文,它将为空。然后 A 被实例化并提供内容,如果失败,则将一些备份内容提供给 A。

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

【问题讨论】:

  • 我觉得它的可读性很好,而且一点也不冗长。不要改变任何东西。
  • 这些都不是答案吗?

标签: java if-statement verbosity


【解决方案1】:

更新:或者您可以简单地删除嵌套,因为它的行为仍然相同。

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

应该工作:

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

【讨论】:

  • 这会做一些不同于原始构造的事情,即使 A != null 也会调用 staticMethod。
  • 至少在我看来,这比原来的和错误的要笨拙得多,这说明了为什么这是一个坏主意:)
  • 可以,但它是可怕的代码——请不要在这样的语句中间放置赋值!
  • 我认为这比原来的可读性差和最差(风格上)
  • 哦,我同意,但他想简化它,这是我能想到的不重构的唯一方法......诚然,这可能是答案。
【解决方案2】:

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

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

}

将Charles建议的代码封装成方法实现Factory_method_pattern

【讨论】:

  • 没看懂,能不能描述一下getAInstance()方法?
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

    我使用 AND 而不是 OR

    【讨论】:

      【解决方案5】:

      我认为这是最好的方法:

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

      【讨论】:

        猜你喜欢
        • 2015-09-12
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 2014-06-18
        相关资源
        最近更新 更多