为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_笑_17 2021-11-17 17:02:06
为了清楚起见,我将尽我所能通过一个例子的镜头而不是代码转储来构建问题。在进入我的例子之前,我的问题如下:如何编写一个以枚举为参数的方法,并返回存储在对象中的静态信息(从公共父级继承,其中定义了静态信息)。这个例子:我正在创建一个包含许多玩家技能的游戏。这些技能是通过对象树创建的,具有以下继承性(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 与实例化技能列表相匹配,并将所有非静态技能信息设置为默认值。但这似乎是对系统的滥用。如何将我的枚举列表干净地链接到我的各种技能类中的静态信息(非静态信息可以忽略)?
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

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”示例。


查看完整回答
反对 回复 2021-11-17
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

正如@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;

    }

}

然后,可以使用反射技术来获取静态字段的信息,说明这里


查看完整回答
反对 回复 2021-11-17
  • 2 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信