我有以下代码:
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())
没有相同的含义。
答案 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);
}