使用Enum生成类似IF的语句



我该如何基于Enum值进行If like语句。

我的枚举游戏状态有WON、LOST、CONTINUE和NOTSTARTED状态。我想根据当前Enum值做出决定。

像这样工作的东西:

if(gameStatus == WON)
{
    point++;
}
else if(gameStatus == LOST)
{
    point--;
}

您有一些合理的选择。您可以static import枚举字段:

import static com.example.foo.GameStatus.*;

或者用枚举类型名称限定,这样您的代码实际上看起来像

if(gameStatus == GameStatus.WON)
{
    point++;
}
else if(gameStatus == GameStatus.LOST)
{
    point--;
}

或者,如果使用switch而不是if/else:,则可以避免两者

switch (gameStatus) {
    case WON:
        point++;
        break;
    case LOST:
        point--;
        break;   
}

您的场景中有第三个选项,那就是在enum类上定义一个抽象方法,并重写该方法,这样就根本没有if-else或switch了!

   ...
   point = point + gameStatus.score();
   ...
    enum STATE {
      WIN {
            @Override
            public int score() {
                return 1;
            }
        }, 
      LOSE {
            @Override
            public int score() {
                return -1;
            }
        }
        public abstract int score();
    }

最新更新