2016-05-16 17 views
0

"CustomEnchantment"を拡張する50種類のクラスがありますが、抽象クラスに静的なゲッターを持たせる方法はありますか? 。 Rage.getMaxLevel()や何かを静的なやり方でやってみよう。問題は、インスタンスを取得すると、各エンチャントに対して50以上のインスタンス1を作成する必要があることを意味します。特定のエンチャントの最大レベルを得るための修正方法が必要です。私は "getMaxLevel()"をインクルードしようとしましたが、それは問題なく戻りますが、抽象クラスを拡張するすべての単一クラスのインスタンスが必要になります。値。 例:特定のクラスのゲッターメソッドを抽象クラスを継承して使用する

私は3つのクラスを拡張しています。 Personには変数ageとnameが含まれます。 クラスのジョシュでは、彼の名前は "ジョシュ"と17歳に設定されています。クラスのジェフでは、彼の名前は "ジェフ"と20歳です。クラスジェニカでは、名前は "ジェニカ"で、彼女の年齢は19です。私は、これらのクラスのうちの特定のクラスから1つのメソッドだけでいつでも年齢を返すメソッドが必要です。例えば、getAge(Jennica)はJennicaの年齢を取得し、getAge(Josh)は年齢などで17を返します。静的に、または簡単にアクセスできる方法でこれを使用する必要があります。

答えて

0

静的変数を使用すると、それを実現できます。静的メンバーは常にサブクラスmax-levelによって更新されるように注意しなければなりません。あなたのコードが成長すれば、それは維持不能になります。

「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 
    } 
} 
+0

だから私はすべてのインスタンスを作成し、保存することになるマネージャーは、あなたが持っている、その後、何を言っているかである必要がありますあなたが魔法使いを渡す静的なintあなたが最大レベルなどをしたいとそこから行く? –

+0

レベルを上げる必要がある場合は便利ですが、実際にはレベルを上げることを検討していません。すべての魅力に対して石を設定しています。魅力を選択できる方法が必要です。エンチャントの最大レベルを返します。だからもし私が怒りのために最大限のレベルを必要とするならば、私は(パラメータについてはわからない)CustomEnchantmentManager.getMaxLevel(Rage.class)やそれと同じようなものが実際に働くでしょう。 .paremetersとして.includeスワイプの最大レベルを返す必要があります。 –

関連する問題