Java - 非静态枚举

标签 java enums non-static

比如说,我有一些类(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/

相关文章:

Java循环任务,日期问题

c# - ASP.NET MVC 在 jquery DataTables 中显示 Enum 列的文本?

java - 如何使用静态方法获取短信

c++ - 如何声明某个结构的成员 var 类型的 var?

java - 主类java中是静态的,构造函数中是非静态的

java - 无法自动连线字段: private org. springframework.security.core.userdetails.UserDetailsS​​ervice

java - 如何正确地在二叉搜索树中添加节点?

java - JSONObject ["featured_image"] 不是字符串

Java 字符串包含方法和枚举

c++ - 将 qmlRegisterType 与 Q_ENUM 和 typedef 枚举一起使用