3

たとえば、いくつかのクラスがあります。

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オブジェクトのインスタンスを操作できるコントロールセンターとして機能します。

ただし、マップの方がおそらく優れています。これが簡単に乱雑になる可能性がある場所を確認できました。

4

3 に答える 3

3

さらに検討すると、おそらくあなたの問題に対する答えは、各列挙型に何らかの種類の異なる値を関連付けたい場合は、異なるクラスの異なるEnumMapsを除くすべてに同じ列挙型を使用することだと思います。この答えが左のフィールドに出ていない場合は、申し訳ありませんが、質問を明確にしてください。:)

EnumMapsの詳細については、こちらをご覧ください:
Taming Tiger:列挙型の基本を超えて
EnumMap API

于 2011-06-24T16:19:45.710 に答える
1

次のような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-24T16:25:08.097 に答える
0

列挙型のすべてのインスタンスに属性を追加できます。惑星の例を参照してください。

http://download.oracle.com/javase/1,5.0/docs/guide/language/enums.html

于 2011-06-24T16:24:45.050 に答える