[英]Can i nest classes within enums, and create arraylist within an enum?
[英]How can I cleanly link Enums to the static information within classes?
為了清楚起見,我將盡最大努力通過示例的角度而不是代碼轉儲來提出問題。
在進入示例之前,我的問題如下:如何編寫一個以枚舉為參數,並返回存儲在對象中的靜態信息的方法(該對象繼承自公共父對象,其中定義了靜態信息) )。
這個例子:
我正在創建一個包含許多玩家技能的游戲。 這些技能是通過對象樹創建的,具有以下繼承(SomeSkill代表十幾種技能中的任何一種):
技能>主動技能> SomeSkill 和 技能>被動技能> SomeSkill
類技能的偽代碼:
Class Skill{
static string name = "Default Skill"
int level;
Skill(int level){
this.level = level;
}
static getName{
return name;
}
}
名稱是靜態的,因為技能的名稱不應改變,而與實例無關。 在我的實際實現中,Skill還包括靜態信息description和id 。
枚舉的實際實現 :
public enum SkillType
{
basic, speed_buff, leap, beat_down
}
問題:
我正在努力做的是編寫一個將SkillType枚舉作為參數並返回可用的Skill對象的方法(不是Skill對象的實例)
在Psuedo代碼中:例如,如果我想遍歷枚舉並打印出所有技能的名稱...
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;
}
}
有關更多信息,請參見官方枚舉文檔中的“行星”示例。
如@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;
}
}
然后,您可以使用反射技術來獲取靜態字段的信息,說明這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.