Скажем, у меня есть несколько классов:
class NPC {
Attributes attributes;
Skills skills;
void doStuff() { //doStuffff }
}
class Player {
Attributes attributes;
Skills skills;
void doStuff() { //doStuffff }
}
И Enum для этих классов:
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, переданным ему.
Карты, вероятно, лучше, хотя я мог видеть, где это может легко запутаться.