比如说,我有一些类(class):
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
}
现在,假设我想做到这样,Player 类或 NPC 类的每个实例实际上都可以拥有自己单独的 Attributes 或 Skills 实例,这些实例可以增加和减少枚举本身的值。这可能吗?如果不是,是否可以使用内部嵌套枚举中的方法来操纵它所在的类的字段值?
这听起来可能有点疯狂、荒谬,而且完全是正宗的,但当您必须找到正确的设计解决方案时……好吧,有时您只需要跳出框框思考。
编辑:
我找到了一个有趣的解决方案,尽管我怀疑它是否与 map 创意一样好。
我觉得发帖会很有趣 :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 对象的任何实例。
虽然 map 可能更好 - 我可以看到哪里容易变得困惑。
最佳答案
经过进一步考虑,我认为如果您希望每个枚举具有与之相关联的某种不同值,那么您的问题的答案可能是对所有但不同的 EnumMaps 使用相同的枚举用于不同的类。如果这个答案在左侧字段中出路,抱歉,但请澄清您的问题。 :)
关于 EnumMaps 的更多信息,请看这里:
Taming Tiger: Beyond the basics of enumerated types
EnumMap API
关于Java - 非静态枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6470647/