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

为了清楚起见,我将尽我所能通过一个例子的镜头而不是代码转储来构建问题。


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


这个例子:


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


技能 > 主动技能 > SomeSkill 和 技能 > PassiveSkill > SomeSkill


类技能的伪代码:


    Class Skill{

       static string name = "Default Skill"

       int level;

       Skill(int level){

          this.level = level;

       }

       static getName{

          return name;

       }

    }

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


enum 的实际实现:


   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 与实例化技能列表相匹配,并将所有非静态技能信息设置为默认值。


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


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


qq_笑_17
浏览 131回答 2
2回答

LEATH

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;    }}有关更多信息,请查看官方枚举文档中的“Planet”示例。

繁华开满天机

正如@Alex 提到的,您可以使用 enum 构造函数,但Class如果您不想创建实例,则可以链接类型而不是创建用于链接的实例:public enum SkillType {    Basic(Basic.class),    SpeedBuff(SpeedBuff.class),    Leap(Leap.class),    ...    private final Class skillClass;    public skillClass(Class skillClass) {        this.skillClass = skillClass;    }    public Class getSkillClass() {        return skillClass;    }}然后,可以使用反射技术来获取静态字段的信息,说明这里。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java