java - 如何将枚举干净地链接到类中的静态信息?

标签 java enums static

为了清楚起见,我将尽力通过示例而不是代码转储来提出问题。

在进入我的示例之前,我的问题如下:如何编写一个方法,将枚举作为参数,并返回存储在对象中的静态信息(该对象继承自公共(public)父级,其中定义静态信息)。

示例:

我正在创建一个包含许多玩家技能的游戏。这些技能是通过对象树创建的,具有以下继承关系(SomeSkill 代表十几个技能中的任何一个):

技能 > ActiveSkill > SomeSkill 技能 > PassiveSkill > SomeSkill

技能类的伪代码:

    Class Skill{
       static string name = "Default Skill"
       int level;
       Skill(int level){
          this.level = level;
       }
       static getName{
          return name;
       }
    }

名称是静态的,因为无论实例如何,技能的名称都不应更改。在我的实际实现中,Skill还包括静态信息descriptionid

枚举的实际实现:

   public enum SkillType
   {
     basic, speed_buff, leap, beat_down
   }

问题:

我正在努力做的是编写一个方法,该方法将 SkillType 枚举作为参数,并返回一个可用的 Skill 对象(不是 Skill 对象的实例)

在伪代码中: 举个例子,如果我想循环遍历 Enum 并打印出所有技能的名称...

    method getSkillClass(SkillType skillType){
       if(skillType == beat_down) return BeatDown
       if(skillType == leap) return Leap
       ...
    }

    for(e : SkillType.getKeys){
       print(getSkillClass(e).getName);
    }

我当前的“解决方案”是创建一个将 SkillType 与实例化技能列表相匹配的映射,并将所有非静态技能信息设置为默认值。

但这似乎是对系统的滥用。

如何将我的枚举列表干净地链接到我的各种技能类别中的静态信息(非静态信息可以忽略)?

最佳答案

Java 枚举允许使用构造函数将数据关联到枚举:

class Skill {
    ...
}

public enum SkillType {
    Basic(new Skill(...)),
    SpeedBuff(new Skill(...)),
    Leap(new Skill(...)),
    ...

    private final Skill skill;

    public SkillType(Skill skill) {
        this.skill = skill;
    }

    public Skill getSkill() {
        return skill;
    }
}

欲了解更多信息,请查看官方enum documentation中的“行星”示例.

关于java - 如何将枚举干净地链接到类中的静态信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52808616/

相关文章:

java - 逐出EhCache中的所有元素

java - 无法使用 GSON 将某些 JSON 解析为 JsonArray

java - 如何使用 openGL (JGL) 缩放图像?

perl - 如何在 Perl 中创建枚举类型?

enums - 使用 Rust 的枚举作为双向查找表

android - 图像下载器类的枚举声明有错误

java - 如何在Java中为父类设置计数器而不让子类访问计数器?

variables - 通过参数初始化Hadoop中的公共(public)静态变量

Java访问实例变量

java - 尽管 lambda 的返回类型,但 `thenApply()` 与 `thenCompose()` 不明确的情况是什么?