首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -非静态枚举

Java -非静态枚举
EN

Stack Overflow用户
提问于 2011-06-25 00:11:31
回答 3查看 4.3K关注 0票数 3

比方说,我有一些课程:

代码语言:javascript
复制
class NPC {
    Attributes attributes;
    Skills skills;

    void doStuff() { //doStuffff }
}

class Player {
    Attributes attributes;
    Skills skills;

    void doStuff() { //doStuffff }
}

以及这些类的枚举:

代码语言:javascript
复制
enum Attributes {
STRENGTH, INTELLIGENCE, AGILITY...//etc
}

enum Skills {
GUNS, MELEE, ATHLETICS...//etc
}

现在,假设我想让class Player或NPC的每个实例都有自己单独的属性或技能实例,它们可以对枚举本身的值进行加减。这个是可能的吗?如果不是,是否可以使用内部嵌套枚举中的方法来操作它所在的类的字段值?

这可能听起来有点疯狂,可笑,而且恰到好处,但当你必须找到正确的设计solution...well时,有时你只需要跳出框框思考。

编辑:

我找到了一个有趣的解决方案,尽管我怀疑它是否像地图想法一样好。

我想这只是一个有趣的帖子:D

代码语言:javascript
复制
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对象的任何实例。

不过,地图可能更好--我知道这很容易弄得一团糟。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-25 00:19:46

进一步考虑,我认为解决问题的方法可能是,如果您希望每个枚举都有一个与之相关的不同值,那么对所有枚举使用相同的枚举,但对不同的类使用不同的EnumMaps。如果这个答案超出了左边的范围,很抱歉,但是请澄清你的问题。:)

有关EnumMaps的更多信息,请查看此处:

Taming Tiger: Beyond the basics of enumerated types

EnumMap API

票数 3
EN

Stack Overflow用户

发布于 2011-06-25 00:25:08

您可以像这样使用EnumMaps

代码语言:javascript
复制
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() { }
}
票数 1
EN

Stack Overflow用户

发布于 2011-06-25 00:24:45

您可以向Enum的每个实例添加属性。请参见Planets示例:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6470647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档