【问题标题】:Using Enums to return a different action for each different object使用 Enums 为每个不同的对象返回不同的操作
【发布时间】:2020-08-15 18:30:39
【问题描述】:

我有一个包含以下详细信息的播放器对象列表

Player{FirstName='Marco', LastName='Reus', Team='Dortmund', Country='Germany', Fitness='Unfit', RecoveryTime='Slow'}

该计划的主要目的是考虑球员的健康和恢复时间,并返回一套行动计划以帮助他们恢复健康。

我使用了枚举并给每个枚举一个整数值aValue

public enum LevelOfFitness {
    /**
     * Enum that represent the different level of Fitness of each player
     */

    CAREER_IN_DOUBT(8), INDEFINITELY_INJURED(7), INJURED(6), UNFIT(5), CLOSE_TO_FITNESS(4), 
NEAR_MATCH_FIT(3),
    MATCH_FIT(2), DATA_DEFICIENT(1), NOT_EVALUATED(0);

    private int value;

    LevelOfFitness (int aValue) {
        this.value = aValue;
    }

    public int getValue () {
        return value;
    }


}

我还有一套枚举行动计划:

public enum ActionPlans{


    GRADUAL_REHABILITATION, SURGERY, INTENSE_GYM_AND_THERAPY, NO_ACTION_NEEDED,REST_AND_REHABILITATION 

}

我正在尝试以示例中的 Marco 为例,如果玩家在 LevelofFitness 中的 5 级不适合并且恢复时间很慢,则将逐步康复作为行动计划返回。

非常感谢

【问题讨论】:

    标签: java oop object enums


    【解决方案1】:

    我认为你需要一个额外的方法 LevelOfFitness.from(String) 和另一个 getActionPlan 给给定的玩家。

    public LevelOfFitness from(String value){  
      // do some input checks
    
      LevelOfFitness found = null;
      for(LevelOfFitness level : LevelOfFitness.values()){
          if(level.name().equalsIgnoreCase(value)){
             return level;
          }
      }
    
       throw new IllegalStateException("Not able to find fitness level for " + value);
    }
    
    
     public ActionPlans getActionPlan(Player player){
    
            String fitness = player.getFitness();
            LevelOfFitness levelOfFitness = LevelOfFitness.from(fitness);
    
            ActionPlans actionPlan = null;
            if(fitnessLevelOfFitness.getValue() == 5){
                actionPlan = GRADUAL_REHABILITATION;
            }
    
            .....
    
            return actionPlan;
        }
    

    您甚至可以将此类方法放在 Player 类本身中,在这种情况下,您可以进一步封装逻辑而不传递播放器引用。

    【讨论】:

    • 感谢 LevelOfFitness.from(String) 的额外方法,它只是返回每个对象的适应度级别,以便可以在 get action plan 方法中调用它。
    • @user14087442 更新了更多细节。您需要通过给定的字符串来检索 LevelOfFitness。示例: Unfit -> 将通过比较名称枚举来获得 UNFIT(5) 枚举,稍后您可以轻松地将其值 5
    • from in public LevelOfFitness from(String value) 指的是哪里?
    • @user14087442 请看一下代码,在getActionPlan里面有一个调用LevelOfFitness levelOfFitness = LevelOfFitness.from(fitness);
    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2014-02-13
    • 2017-09-20
    • 2016-04-10
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多