说,我有一些课程:
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 实例,这些实例可以添加和减去枚举本身的值。这可能吗?如果不是,是否可以使用内部嵌套枚举中的方法来操作它所在的类的字段值?
这可能听起来有些疯狂、荒谬,而且简直是疯了,但是当您必须找到正确的设计解决方案时……嗯,有时您只需要跳出框框思考。
编辑:
我找到了一个有趣的解决方案,尽管我怀疑它是否与地图创意一样好。
我认为发帖会很有趣: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 对象实例。
不过地图可能更好——我可以看到这很容易变得混乱。