如何在Java中编写简短的逻辑表达式?

sha*_*nar 2 java logical-operators

有没有办法对同一个变量进行连续的逻辑运算?

例:

if (animation.getStatus() == Animation.Status.PAUSED || animation.getStatus() == Animation.Status.STOPPED) {
    animation.playFromStart();
} else if (animation.getStatus() == Animation.Status.RUNNING) {
    animation.stop();
}
Run Code Online (Sandbox Code Playgroud)

你在if子句中看到我检查了animation.getStatus()两次,一次是暂停,一次是停止.有没有办法让它变得像animation.getStatus() == Animation.Status.PAUSED || Animation.Status.STOPPED

我确定已经问过这个问题,但我真的不知道要搜索什么,所以如果这是重复的话,我很抱歉.

Dav*_*ton 7

没有; Java语法是不可变的.

有几个选项,但最简单的是重构,作为奖励使其清晰,例如,

if (animation.shouldReplay()) {
    animation.playFromStart();
} else if (animation.shouldStop() {
    animation.stop();
}
Run Code Online (Sandbox Code Playgroud)

或更深层次,例如,

animation.controlFromCurrentStatus();
Run Code Online (Sandbox Code Playgroud)

如果您不愿意封装,只需导入状态有助于:

Animation.Status currentStatus = animation.getStatus();
if (currentStatus == PAUSED || currentStatus == STOPPED) {
    animation.playFromStart();
} else if (currentStatus == RUNNING) {
    animation.stop();
}
Run Code Online (Sandbox Code Playgroud)

或者制作它们enum,无论如何它们应该可以说是:

switch (currentStatus) {
case PAUSED:
case STOPPED:
    animation.playFromStart();
    break;
case RUNNING:
    animation.stop();
}
Run Code Online (Sandbox Code Playgroud)