たとえば、いくつかのクラスがあります。
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の各インスタンスが、列挙型自体の値を加算および減算できる属性またはスキルの独自の個別のインスタンスを持つことができるようにしたいとします。これは可能ですか?そうでない場合は、ネストされた列挙型内のメソッドを使用して、それが存在するクラスのフィールド値を操作することは可能でしょうか?
これはやや狂気でばかげているように聞こえるかもしれませんが、適切な設計ソリューションを見つけなければならないときは...まあ、時には箱の外で考えなければならないこともあります。
編集:
私は興味深い解決策を見つけましたが、それが地図のアイデアと同じくらい良いとは思えません。
投稿するのは面白いと思いました: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オブジェクトのインスタンスを操作できるコントロールセンターとして機能します。
ただし、マップの方がおそらく優れています。これが簡単に乱雑になる可能性がある場所を確認できました。