假设我有50个不同的类扩展了" CustomEnchantment",有没有办法在抽象类中使用静态getter来获取特定类的值之一。说我想要最高等级" Rage"然后我以静态的方式做Rage.getMaxLevel()或者其他什么。问题是获得一个实例意味着我必须为每个附魔制作50个以上的实例1。我想要一个修复方法来获得特定附魔的最高等级。我试图只包括一个" getMaxLevel()"并且它返回正常,但有了这个,我需要一个扩展抽象类的每个类的实例,我宁愿有一个获得1个特定类值的静态方法。 一些例子:
我有3个类扩展Person。人包括变量年龄和名称。 在Josh的课堂上,他的名字被设定为" Josh" 17岁的杰夫,他的名字是"杰夫"在Jennica班,名字是" Jennica"她的年龄是19岁。我需要的是一种只用一种方法随时从这些类中的特定类中返回年龄的方法。所以例如(这不会工作)getAge(Jennica)获得Jennica的年龄,getAge(Josh)为他的年龄等返回17 ..我需要这个以静态或以我可以访问它的方式使用容易。
答案 0 :(得分:0)
通过静态变量,你可以意识到这一点。您只需要注意您的静态成员始终由子类max-level更新。如果您的代码增长,那将使其无法维护。
更好的方法是创建类似“CustomEchantmentManager”的Manager类或其他类似的东西。它可以存储所有实例的列表。此外,它可以存储像CustomEchantment enchantmentWithHighestLevel
这样的属性,您可以在其中存储具有最高级别的实例。让你的经理观察结界,并在一个结界的新等级之后,检查它的等级是否高于实际存储的附魔等级,如果是,则覆盖它在属性中的引用。这不会更改所有实例,因为它只引用具有最高级别的实例。
经理的例子:
public class CustomEnchantmentManager implements Observer {
private ArrayList<CustomEnchantment> enchantments;
private CustomEnchantment enchantmentWithHighestLevel = null;
public CustomEnchantmentManager() {
enchantments = new ArrayList<CustomEnchantment>();
}
@Override
public void update(Observable obs, Object o) {
if(this.enchantmentWithHighestLevel.getLevel() > ((CustomEnchantment)o).getLevel) {
//do Nothing
else {
this.enchantmentWithHighestLevel = (CustomEnchantment)o;
}
}
结界的例子:
public class CustomEnchantment() extends Observable {
public int level = 0;
public CustomEnchantment() {
}
public void incrementLevel() {
this.level++;
setChanged(); //method from Observable
notifyObservers(this); //send Observers instance of this object
}
}