"Vererben" statischer Felder/Methoden

Saheeda

Top Contributor
Hi,

ich habe folgendes Konstrukt und bin mir nicht sicher, wie ich das am saubersten löse:

Ich habe in den Unterklassen einige Attribute, welche für sämtliche Instanzen dieser speziellen Unterklasse gleich sein sollen. Allerdings soll jede Unterklasse eigene Werte dafür haben, z.B. soll "Dragon" zwar prinzipiell über dieses Feld verfügen, aber mit komplett anderen Werten, als "Archer".

Java:
public abstract class Unit {
	private static Map<Level, Boni> boniMap;
}

public class Dragon extends Unit {
	private static Map<Level, Boni> boniMap;
	public static Map<Level, Boni> getBoniMap() {
		return Dragon.boniMap;
	}
}

public class Archer extends Unit {
	private static Map<Level, Boni> boniMap;
	public static Map<Level, Boni> getBoniMap() {
		return Archer.boniMap;
	}
}

Da dieses Feld statisch ist, gehen mir aber einige Vorteile der Vererbung flöten und ich müsste es in jeder Unterklasse erneut deklarieren. Sieht für mich sehr unsauber aus und verletzt das DRY-Prinzip.

Gibt es eine Möglichkeit, wie dieses Feld zwar für alle Instanzen der jeweiligen Klasse identisch ist, ich es aber trotzdem nicht überall erneut explizit deklarieren muss?
 
Ein Variante wäre "boniMap" in der Basisklasse Unit als nicht statisch zu deklarieren und diese dann jeweils im Konstruktor der spezifischen Klassen zu befüllen.
Problem: Es müllt sehr den Speicher zu da natürlich die Listen alle X mal existieren.

Eine andere Variante wäre es die "Boni" Maps auszulagern in eine eigene Klasse (welche nur 1x existiert - kein Singleton 😉).
Java:
public class UnitBoniCache {
	private Map<Class, Map<Level, Boni>> boni;
	
	....
}
Dieser "Cache" wird 1x bei Programmstart geladen und jedes Objekt holt sich im Konstruktor die Referenz auf die richtige Map ab.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben