有没有办法将以下代码缩短为一个if语句?

时间:2017-05-31 22:15:42

标签: java android if-statement

我有以下代码:

if (!isFinishing()) {
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
         if (!isDestroyed()) {
              showScoreScreenFragment(chronoText);
         }
     } else {
          showScoreScreenFragment(chronoText);
     }
}

在我提交片段交易之前,我需要写。有没有办法在一个if语句而不是3?

中进行此测试

因为这个:

if (!isFinishing() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && !isDestroyed())

没有相同的含义。

4 个答案:

答案 0 :(得分:3)

有一种方法可以将代码缩短到一行(但请在代码段之后继续阅读):

if (!isFinishing() && (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1 || !isDestroyed())) showScoreScreenFragment(chronoText);

警告

除非绝对必要,否则请不要这样做。像这样的编码使得代码片段的含义几乎不可能被理解,这反过来使得维护(大多数软件开发成本所在的位置)变得更加困难,因此更加昂贵。

答案 1 :(得分:2)

我会将其视为两个条件:

if (!isFinishing()) {
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1
             || !isDestroyed()) {
         showScoreScreenFragment(chronoText);
     }
}

请注意||的第一个操作数是问题中条件的补充。

答案 2 :(得分:0)

我不这么认为。

您正在检查三种情况,但正如您指出的那样,您不能将它们全部放在一个if语句中,因为它们是顺序敏感的。

根据您打算如何使用该程序,可能有一种方法可以合并if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)if (!isDestroyed())。如果他们都是真的你就什么都不做。这是有意的吗?

但是,我没有看到减少这个的好方法,但仍然得到相同的语义。

编辑:既然你修正了拼写错误,忽略了上面的内容!

答案 3 :(得分:0)

这是唯一可行的解​​决方案

if (!isFinishing() && (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1|| !isDestroyed())) {
showScoreScreenFragment(chronoText);
}