gpt4 book ai didi

Java - 非静态枚举

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:33 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com