如何解决使用枚举为每个不同的对象返回不同的操作
我有一个播放器对象列表,其中包含如下详细信息
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,这不适合并且恢复时间很慢,请返回逐步康复作为行动计划。
非常感谢
解决方法
我认为您需要给定玩家一个额外的方法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类本身中,在这种情况下,您可以进一步封装逻辑,而无需传递玩家引用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。