比方说,我有一些课程:
class NPC {
Attributes attributes;
Skills skills;
void doStuff() { //doStuffff }
}
class Player {
Attributes attributes;
Skills skills;
void doStuff() { //doStuffff }
}以及这些类的枚举:
enum Attributes {
STRENGTH, INTELLIGENCE, AGILITY...//etc
}
enum Skills {
GUNS, MELEE, ATHLETICS...//etc
}现在,假设我想让class Player或NPC的每个实例都有自己单独的属性或技能实例,它们可以对枚举本身的值进行加减。这个是可能的吗?如果不是,是否可以使用内部嵌套枚举中的方法来操作它所在的类的字段值?
这可能听起来有点疯狂,可笑,而且恰到好处,但当你必须找到正确的设计solution...well时,有时你只需要跳出框框思考。
编辑:
我找到了一个有趣的解决方案,尽管我怀疑它是否像地图想法一样好。
我想这只是一个有趣的帖子:D
public final class StatControl {
int agility;
int endurance;
int intelligence;
int intuition;
int luck;
int speed;
int strength;
}
enum Attributes {
AGILITY {
void add(int value) {
test.agility += value;
}
},
ENDURANCE {},
INTELLIGENCE {},
INTUITION {},
LUCK {},
SPEED {},
STRENGTH {};
abstract void add(int value);
StatControl test;
void receiveObj(StatControl test) {
this.test = test;
}
}正如您所看到的,一个类包含枚举的整数表示,但是枚举本身充当一个控制中心,它可以操作传递给它的StatControl对象的任何实例。
不过,地图可能更好--我知道这很容易弄得一团糟。
发布于 2011-06-25 00:19:46
进一步考虑,我认为解决问题的方法可能是,如果您希望每个枚举都有一个与之相关的不同值,那么对所有枚举使用相同的枚举,但对不同的类使用不同的EnumMaps。如果这个答案超出了左边的范围,很抱歉,但是请澄清你的问题。:)
有关EnumMaps的更多信息,请查看此处:
Taming Tiger: Beyond the basics of enumerated types
EnumMap API
发布于 2011-06-25 00:25:08
您可以像这样使用EnumMaps
abstract class Actor {
final Map<Attribute, Integer> attributes = new EnumMap<Attribute, Integer>();
final Map<Skill, Integer> skills = new EnumMap<Attribute, Integer>();
abstract void doStuff();
}
class NPC extends Actor {
void doStuff() { }
}
class Player extends Actor {
void doStuff() { }
}发布于 2011-06-25 00:24:45
您可以向Enum的每个实例添加属性。请参见Planets示例:
http://download.oracle.com/javase/1,5.0/docs/guide/language/enums.html
https://stackoverflow.com/questions/6470647
复制相似问题