Enum als generischer Typ

Naryxus

Aktives Mitglied
Hey,

ich habe das folgende Problem:

Wie ich in einem anderen Beitrag schon beschrieben habe, habe ich für die Bewertung einer Fähigkeit ein Interface geschrieben, das eine Bewertungsmethode verlangt.
Jede Fähigkeit muss dieses Interface implementieren. Jetzt gibt es aber noch verschiedene Oberklassen von Fähigkeiten. Es gibt beispielsweise Eigenschaften, die passiv sind, es gibt Attacken, die aktiv sind und es gibt Elementtypen. Diese Elementtypen bieten Vor- und Nachteile anderen Elementtypen gegenüber.

Deshalb habe ich momentan eine Klasse
Java:
public class Advantage implements Ability {}
und eine Klasse
Java:
public class Disadvantage implements Ability {}
Dazu gibt es ein Enum
Java:
public enum Type {Water, Fire, Nature, Dark, Light}
, das die einzelnen Elemente darstellt. Momentan muss den beiden Klassen jeweils noch der Typ übergeben werden, um die Klasse zu erzeugen.

Ich wollte nun fragen, ob es irgendwie die Möglichkeit gibt, das generisch zu lösen. Dass man also den Typ generisch übergeben kann, in etwa wie folgt:
Java:
public static void main(String[] args) {
   Advantage<Type.Fire> fireAdvantage = new Advantage<Type.Fire>();
}

Oder anders gesagt, geht es um die Frage, ob man Enums als generischen Typ übergeben kann.
 
Keine Ahnung, was du letzen Endes genau damit vorhast, aber denkbar wäre so etwas:
Code:
Advantage<Type> fireAdvantage = new Advantage<>(Type.Fire);
 
Letztendlich geht es darum, dass ich alle Fähigkeiten in einer Factory bereitstellen möchte. Und anstatt mit Strings in der Factory-Methode zu arbeiten, wollte ich gerne mit Class-Objekten arbeiten. Also letztendlich sollen die Fähigkeiten in einer Map<Class, Ability> gespeichert werden.
Und ich würde dann gerne die Ability fireAdvantage über
Java:
Factory.getAbiliy(Advantage<Type.Fire>.class);
aufrufen.
Ist das überhaupt möglich?
 
Fire ist aber eine Instanz des Typs Type und keine eigene Klasse. Vielleicht kannst du ja mit Tupeln <Ability, Type> arbeiten.
Das große Ganze habe ich aber immer noch nicht vor Augen. Vielleicht kann ja jemand, der deine anderen Beiträge mitverfolgt hat, mehr dazu sagen...
 
Vielleicht eine kurze Erklärung: Es ging darum, dass Helden über eine Menge von Fähigkeiten (Ability) definiert sind. Die Fähigkeiten sind allerdings eigentlich alle statisch. Ich konnte die Methode im Interface (damals noch abstrakte Klasse) natürlich nicht statisch deklarieren, da die Methode so nicht vererbt werden konnte.

Ich wollte nun aber auch nicht, dass mehr als ein Objekt von der entsprechenden Fähigkeit erzeugt werden kann. Dementsprechend habe ich eine AbilityFactory geschrieben. Momentan muss noch ein String eingegeben werden, um die Fähigkeit von der Factory zu erhalten. Ich dachte nur, dass es möglich wäre, das Klassenobjekt zu übergeben. Die Idee ist mir eigentlich nur gekommen, weil mein Editor die Klasse vorgeschlagen hat, was beim String natürlich nicht möglich ist 😀
 

Zurück
Oben