【问题标题】:Use getter methods from a specific class extending abstract class使用来自扩展抽象类的特定类的 getter 方法
【发布时间】:2016-05-16 13:14:39
【问题描述】:

假设我有 50 个扩展“CustomEnchantment”的不同类,有没有办法在抽象类中有一个静态 getter,它可以让我获得特定类的值之一。假设我想要“Rage”的最大级别,那么我会以静态方式执行 Rage.getMaxLevel() 或其他操作。问题是获得一个实例意味着我必须为每个附魔制作 50 多个实例 1。我只想有一个修复方法来获得特定附魔的最高等级。我试图只包含一个“getMaxLevel()”并且它返回它很好,但是这样,我需要一个扩展抽象类的每个类的实例,我宁愿有一个静态的方式来获取 1 个特定的类价值。 一些例子:

我有 3 个类扩展 Person。人员包括变量年龄和姓名。 在 Josh 班级中,他的名字设置为“Josh”,年龄为 17。在 Jeff 班级中,他的名字为“Jeff”,年龄为 20。在 Jennica 班级中,他的名字为“Jennica”,年龄为 19。 need 是一种方法,可以在任何时候只用一种方法从这些类中的一个特定的类中返回年龄。因此,例如(这不起作用)getAge(Jennica) 获取 Jennica 的年龄,getAge(Josh) 为他的年龄返回 17 等。我需要将其用于静态或以我可以轻松访问它的方式使用。

【问题讨论】:

    标签: java class numbers getter


    【解决方案1】:

    通过静态变量,您可以意识到这一点。您只需要注意您的静态成员始终由子类最大级别更新。如果您的代码增长,那将使其无法维护。

    更好的方法是创建一个像“CustomEchantmentManager”这样的管理器类或其他东西。它可以存储所有实例的列表。此外,它可以存储像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
        }
    }
    

    【讨论】:

    • 所以我应该有一个管理器来创建和存储你所说的每个实例,然后有一个静态整数,你可以在其中传递你想要最高级别的附魔等等......然后从那里?
    • 如果我必须增加等级,这看起来很有用,但我实际上并没有考虑提高等级,我为每个附魔设置了一个等级,我只需要一个我可以的方法选择任何附魔,它会返回附魔的最高等级。因此,如果我需要 Rage 的最高级别,我会做(不确定参数)CustomEnchantmentManager.getMaxLevel(Rage.class) 或类似的东西,如果我会使用相同的方法但给它 Swipe .class 作为参数,它应该返回附魔 Swipe 的最高级别。
    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    相关资源
    最近更新 更多