Best Practice Generics mit Enum

Jesterhead

Mitglied
Hallo zusammen,
ich habe mehrere Datensätze im Zugriff und kann diese über eine vorhandene Enum unterscheiden. Beispiel:

Java:
public enum Automarken {
    Audi, Mercedes, Ford
}

Dazu getter Methoden:
Java:
public Audi getAudi(String marke){
 return execute.load(Audi.class, marke);
}

public Mercedes getMercedes(String marke){
 return execute.load(Mercedes.class, marke);
}

public Ford getFord(String marke){
 return execute.load(Ford.class, marke);
}

Ich stelle mir aber eher eine solche Lösung vor:
Java:
public T getAuto(Automarken<T> automarke, String marke){
 //return execute.load(automarke, marke);
}

Ich habe noch nicht so viel mit generics gemacht und hoffe auf etwas Hilfe von euch.
 

Robert Zenz

Top Contributor
Naja, du kannst natuerlich jederzeit die Klassen dynamisch anhand des Namens des Enum-Werts laden. Grob:

Java:
Automarken automarke = Autormarken.Mercedes;

Class<?> automarkenKlasse = Class.forName(automarke.name());
return execute.load(automarkenKlasse);

Wobei du dich in deinem Code relativ oft wiederholst (wieso wird Marke nochmal als String uebergeben?).
 

Jesterhead

Mitglied
Java:
public T getAuto(Automarken<T> automarke, String seriennummer){
 //return execute.load(automarke, marke);
}

Marke als String war evtl. nicht gut als Beispiel. So wäre es korrekt. Ich habe ein identifier der innerhalb einer Klasse (Automarke) eindeutig ist. Deshalb kommt das als String.
Wichtig wäre halt noch, dass der Returntype anhand der Enum erkannt wird. Gebe ich als Enum Mercedes, erwarte ich als return type ein Objekt vom typ Mercedes.class
 
K

kneitzel

Gast
Ich finde das noch alles etwas verwirrend. Du hast zum einen Klassen wie Mercedes, Ford, ... Das sind Automarken und bei dir taucht Automarken auch auf (Wobei Klassenname wäre dann eher Automarke - also Singular).

Was soll das mit dem Enum dann noch werden? Was bezweckst Du mit dem Enum?

Wenn du eine Methode hast, die mit der Klasse als Parameter etwas anfangen kann, dann kann man natürlich da etwas machen wie:
Java:
public <T> Automarke getAuto(Class<T extends Automarke> clazz, String seriennummer){
   return execute.load(clazz, marke);
}

Da hast Du dann kein Enum und du kannst dies dann unabhängig von jedem Enum für jede Klasse aufrufen, die von Automarke erbt.

Andererseits kannst Du eine Enum auch erweitern. Die Elemente können halt alle alles noch ein Element bekommen, dass eine Function oder BiFunction ist (oder was Du auch immer brauchst). Und die setzt Du dann im Konstruktor so dass du dann eine enum hast a.la.
Java:
public enum Automarken {
    AUDI(s -> whatever(Audi.class, s)),
    MERCEDES(s -> whatever(Audi.class, s)),
    FORD(s -> whatever(Audi.class, s));
    
    // Hier dann noch das Feld das das übergebene Lambda aufnehmen kann,
    // den Konstruktor und natürlich auch
    // eine public Methode, die dies dann aufruft und das Ergebnis zurück gibt.
}

Aber so ein usecase sieht erst einmal ungewöhnlich aus. Und ein enum Member Audi und eine Klasse Audi... Daher: es werden in der Regel nur Grossbuchstaben und _ verwendet!

Der Ansatz geht aber natürlich auch ganz ohne Enum. Du kannst eine zentrale Stelle haben, bei denen man Klassen registrieren kann. Da kann dann auch z.B. eine Methode für eine Factory hinterlegt werden. Unter dem Strich hat man dann halt eine Map vom Namen hin zu dem, was da auch im Enum gelandet ist. Bei einem Aufruf über den Namen kann dann aus der Map geholt werden, was dann ausgeführt werden soll.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Neumi5694 Interface Generics für Enum-Filterung verwenden Allgemeine Java-Themen 5
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
P Generics und Arrays Allgemeine Java-Themen 6
M Generics / Typen Allgemeine Java-Themen 1
Kirby.exe InsertionSort mit Generics Allgemeine Java-Themen 33
Kirby.exe Vererbung bei Generics Allgemeine Java-Themen 7
H Klarnamen etc... (von Wie Generics lernen?) Allgemeine Java-Themen 26
D Wie Generics lernen? Allgemeine Java-Themen 26
L Compiler-Fehler Generics beim Anhängen von Predicates Allgemeine Java-Themen 1
W Vererbung Generics - mal wieder die verhaßte Rückwärtskompatibilität Allgemeine Java-Themen 2
S Verstaendnisfrage Generics Allgemeine Java-Themen 19
W Generics + Vererbung Allgemeine Java-Themen 47
I Methoden Generics-Methode Allgemeine Java-Themen 3
D Mit Generics arbeiten - Übungsaufgabe Allgemeine Java-Themen 3
K Factory Pattern: Mit Generics umgehen Allgemeine Java-Themen 6
G Generics Allgemeine Java-Themen 31
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
Hacer Generics & Collections Allgemeine Java-Themen 8
H Collector Generics Problem (incl. Stream & Lambda) Allgemeine Java-Themen 4
C Gemeinsame Oberklasse zweier Generics Allgemeine Java-Themen 10
erdmann Datentypen Methodendeklaration mit Generics Allgemeine Java-Themen 2
Z Datentypen Verschachtelte Generics Allgemeine Java-Themen 1
Neumi5694 Datentypen Generics Allgemeine Java-Themen 5
S Mit Generics Klasse erstellen die selbst T erweitert..? Allgemeine Java-Themen 4
Tarrew Generics - Type erasure Allgemeine Java-Themen 5
N Problem mit Generics und Interface Allgemeine Java-Themen 4
H Generics als Parameter Allgemeine Java-Themen 1
kaoZ Generics und Vererbung Allgemeine Java-Themen 3
A Datentypen Generics: Wie am besten auf Typparameter zugreifen Allgemeine Java-Themen 2
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
vandread Kleine Generics Aufgabe aus einer Prüfung... wie ist das gemeint? Allgemeine Java-Themen 6
G Generics sind zu streng - oder ich zu naiv? Allgemeine Java-Themen 3
G Verschachtelte Generics Allgemeine Java-Themen 2
O Generics Allgemeine Java-Themen 42
M Problem mit Generics Allgemeine Java-Themen 10
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
H Collections Generics und Reflection Allgemeine Java-Themen 6
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
H Problem mit Java Generics Allgemeine Java-Themen 6
J Generics: Typparameter als Klasse zurückliefern Allgemeine Java-Themen 4
H Generics Allgemeine Java-Themen 5
P Probleme mit Generics Allgemeine Java-Themen 5
B Generics und primitve arrays Allgemeine Java-Themen 6
M Generics Allgemeine Java-Themen 11
1 Collections Generics, internes Verhalten Allgemeine Java-Themen 16
T Warnungsfreie Verwendung von Generics Allgemeine Java-Themen 11
M Probleme mit Generics Allgemeine Java-Themen 5
D Java Generics Allgemeine Java-Themen 8
2 Generics: bounded wildcards Allgemeine Java-Themen 4
J Generics / vermeiden von downcasts Allgemeine Java-Themen 2
2 Generics oder nicht? Allgemeine Java-Themen 8
E Problem mit Generics und Comparable Allgemeine Java-Themen 16
W Erweitern einer Klasse mit Generics Allgemeine Java-Themen 8
H Generics für Methode Allgemeine Java-Themen 14
N Überladen mit Hilfe von Generics Allgemeine Java-Themen 3
S Generics: Fuer Set<T> ein T-Klassenobjekt erhalten? Allgemeine Java-Themen 3
Q Der innere Typ von Generics? Allgemeine Java-Themen 3
N Generics-NullpointerException Allgemeine Java-Themen 7
2 Generics - Typ Allgemeine Java-Themen 12
P Generics Problem Allgemeine Java-Themen 10
S Type safety Warnings beim casten von Generics Allgemeine Java-Themen 6
N Generics Allgemeine Java-Themen 3
V Frage zu Generics Allgemeine Java-Themen 2
S java generics klassen deklaration Allgemeine Java-Themen 7
B hashtable für unterschiedliche Typen - mit Generics Allgemeine Java-Themen 8
E Generics Allgemeine Java-Themen 3
MQue Generics Allgemeine Java-Themen 4
R Problem mit Reflection und Generics Allgemeine Java-Themen 3
C Klassen, die aufeinander verweisen (mit Generics) Allgemeine Java-Themen 16
G Generics - W.card unter Nutzung von Annotationsklasse? Allgemeine Java-Themen 6
G sortieren von generics Allgemeine Java-Themen 10
G Generics in Map. Type of value abhängig vom key Allgemeine Java-Themen 3
A Generics Verständnisfrage Allgemeine Java-Themen 7
Z Generics funzt nicht? Allgemeine Java-Themen 2
T Generics Allgemeine Java-Themen 18
G ComboBox: Nur eine Art Klasse zulassen (Generics) Allgemeine Java-Themen 3
J Generics Expertenwissen? Allgemeine Java-Themen 5
S Generics-Problem Allgemeine Java-Themen 3
T Generics und Wil-dcards Allgemeine Java-Themen 8
Q Typen von Generics & Casten Allgemeine Java-Themen 3
S Generics Allgemeine Java-Themen 2
R Problem mit Generics Allgemeine Java-Themen 2
G Trotz Generics Cast-Fehler! Allgemeine Java-Themen 5
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
T Generics und instanceof Allgemeine Java-Themen 10
T Generics und Exceptions Allgemeine Java-Themen 6
M Beliebig viele Typen bei Generics Allgemeine Java-Themen 3
G Reflection objekt mit generics erzeugen Allgemeine Java-Themen 5
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
G Generics und Comparable Allgemeine Java-Themen 11
H Generics Problem Allgemeine Java-Themen 3
F Generics: spricht etwas dagegen raw types zu verwenden? Allgemeine Java-Themen 31
M Generics - besser programmieren, Warnung umgehen Allgemeine Java-Themen 4
E Java, UML, Generics Allgemeine Java-Themen 6
P Array von Vectoren + Generics Allgemeine Java-Themen 6
M ArrayList erweitern - generics Allgemeine Java-Themen 4
E Generics -> UML Allgemeine Java-Themen 4
G Generics: Instanzieren einer Klasse in einer Methode. Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben