У меня есть класс, который имеет следующее:
final class Attributes {
Attribute agility;
Attribute endurance;
Attribute intelligence;
Attribute intuition;
Attribute luck;
Attribute speed;
Attribute strength;
private ArrayList<Attribute> attributes;
private boolean initialized = false;
public Attributes() throws IllegalAccessException {
initializeAttributes();
store();
}
public ArrayList<Attribute> getAttributes() {
return attributes;
}
private void initializeAttributes() {
if (!initialized) {
agility = new Agility();
endurance = new Endurance();
intelligence = new Intelligence();
intuition = new Intuition();
luck = new Luck();
speed = new Speed();
strength = new Strength();
initialized = true;
}
}
private void store() throws IllegalAccessException {
Field[] fields = this.getClass().getDeclaredFields();
attributes = new ArrayList<Attribute>();
if (initialized) {
for (Field f : fields) {
if (f.getType() == Attribute.class) {
attributes.add((Attribute)f.get(this));
}
}
}
}
Моя идея так или иначе использовать такой метод:
public void setAttribute(Class attribute.getClass(), int value) {
}
В этом методе вызывающая сторона будет указывать тип атрибута для изменения (например, сила, интеллект и т. Д.), И процесс будет проходить через векторный массив, полный атрибутов, перечисленных выше, чтобы определить, каким атрибутом манипулировать, путем определение того, был ли переданный подкласс атрибута равен подклассу из упомянутого вектора. Если бы это было так, подкласс в векторе был бы изменен.
Возможно ли это? Основная причина, по которой я спрашиваю об этом, потому что я не уверен, что obj.getClass () / getType () == obj2.getClass () / getType () также примет во внимание подклассы.