2016-05-16 16 views
0

Sagen, ich habe wie 50 verschiedene Klassen, die "CustomEnchantment" erweitert, gibt es eine Möglichkeit, eine statische getter in der abstrakten Klasse, die mich einen der Werte einer bestimmten Klasse erhält . Sagen wir, ich möchte max Level von "Rage", dann würde ich Rage.getMaxLevel() oder etwas, auf eine statische Art und Weise tun. Das Problem ist, dass das Erhalten einer Instanz bedeuten würde, dass ich 50+ Instanzen für jede Verzauberung machen müsste. Ich möchte nur einen festen Weg finden, um den maximalen Level eines bestimmten Verzauberers zu erhalten. Ich habe versucht, nur ein "getMaxLevel()" einzuschließen und es gibt es gut, aber damit würde ich eine Instanz jeder einzelnen Klasse benötigen, die die abstrakte Klasse erweitert, ich hätte lieber eine statische Möglichkeit, eine bestimmte Klasse zu bekommen Wert. Einige Beispiele:Verwenden Sie Getter-Methoden aus einer bestimmten Klasse abstrakte Klasse

Ich habe 3 Klassen erweitern Person. Person enthält die Variablen Alter und Name. In der Klasse Josh wird sein Name auf "Josh" und Alter 17 gesetzt. In der Klasse Jeff heißt er "Jeff" und ist 20 Jahre alt. In der Klasse Jennica heißt der Name "Jennica" und ihr Alter ist 19. Was? Ich brauche eine Methode, um das Alter von einer bestimmten dieser Klassen jederzeit mit nur einer Methode zurückzugeben. Also zum Beispiel (Das funktioniert nicht) getAge (Jennica) bekommt Jennica Alter, getAge (Josh) gibt 17 für sein Alter usw. zurück. Ich brauche dies in einer statischen oder in einer Weise, wo ich leicht darauf zugreifen kann.

Antwort

0

Durch eine statische Variable könnten Sie das erkennen. Sie müssen nur darauf achten, dass Ihr statisches Member immer von den Unterklassen max-level aktualisiert wird. Wenn Ihr Code wächst, wird er nicht mehr erreichbar sein.

Ein besserer Ansatz könnte sein, eine Manager-Klasse wie "CustomEchantmentManager" oder etwas anderes zu machen. Es könnte eine Liste aller Ihrer Instanzen speichern. Es könnte auch ein Attribut wie CustomEchantment enchantmentWithHighestLevel speichern, in dem Sie die Instanz mit der höchsten Ebene speichern. Lass deinen Manager die Verzauberungen beobachten und nach einer neuen Stufe einer Verzauberung überprüfe, ob die Stufe höher ist als die Ebene der tatsächlich gespeicherten Verzauberung, und wenn ja, überschreibe die Referenz im Attribut. Dadurch werden nicht alle Instanzen geändert, da nur auf die Instanz mit der höchsten Ebene verwiesen wird.

Beispiel für den Manager:

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; 
    } 
} 

Beispiel für eine Verzauberung:

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

Also sollte ich einen Manager haben, die jede Instanz würde die Erstellung und Speicherung ist, was Sie sagen, dann haben Statisches int, wo du in der Verzauberung vorbeikommst willst du max level für etc .. und gehst von dort? –

+0

Das sieht nützlich aus, wenn ich die Level erhöhen müsste, aber ich bin eigentlich nicht darauf aus, die Levels zu erhöhen, ich habe ein Level in Stein für jeden Zauber, ich brauche nur eine Methode, wo ich einen beliebigen Zauber wählen kann Gib die maximale Stufe des Verzauberts zurück. Wenn ich also ein maximales Level für Rage benötige, würde ich (nicht sicher über Parameter) CustomEnchantmentManager.getMaxLevel (Rage.class) oder etwas ähnliches, das tatsächlich funktionieren würde, und wenn ich dieselbe Methode verwenden würde, aber Swipe geben .klasse als Parameter sollte es max level für verzaubern Swipe zurückgeben. –

Verwandte Themen