Datentypen Deklarierte Felder einer Generic Klasse bestimmen

L

lam_tr

Top Contributor
Guten morgen zusammen,

ich stehe mal wieder vor einem Problem, bei der ich nicht genau weiß ob es so überhaupt geht, oder einfach syntaktisch falsch angehe.

Ich habe eine ColumnMapper mit Generic Type T. T soll einfach eine Pojo Datenklasse sein. Kann ich zur Laufzeit alle deklarierten Felder von T im Konstruktur von der ColumnMapper bestimmen?

Sinn der Sache ist mit Hilfe einer Pojo die Columns zu erstellen.

Java:
public class ColumnMapper<T> {

    public static class Person {
        private String name;
        private String firstname;
        private String lastname;
    }

    public ColumnMapper() {
        // Ich suche an der Stelle die Felder von T
        Field[] fields = T.getDeclaredFields();
        for (Field field : fields) {
           // createColumn(field.getName());
        }
    }

    public static void main(String[] args) {
        ColumnMapper<Person> columMapper= new ColumnMapper<>();
    }
}

Viele Grüße
lam
 
L

LimDul

Top Contributor
Das geht so nicht. Zur Laufzeit existiert T nicht. Du musst irgendwo ein Class Objekt reingeben oder eine Instanz von T haben, worüber du an die Klasse kommst
 
H

httpdigest

Top Contributor
Stichwort "Super Type Token":
Java:
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
public abstract class ColumnMapper<T> {
  public static class Person {
    private String name;
    private String firstname;
    private String lastname;
  }
  public ColumnMapper() {
    // Ich suche an der Stelle die Felder von T
    ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
    Class<?> typeArgument = (Class<?>) pt.getActualTypeArguments()[0];
    Field[] fields = typeArgument.getDeclaredFields();
    for (Field field : fields) {
      System.out.println(field.getName());
    }
  }
  public static void main(String[] args) {
    ColumnMapper<Person> columMapper = new ColumnMapper<Person>(){};
  }
}
Siehe auch verwandten Post: https://www.java-forum.org/thema/wildcard-und-class-type.189656/
 
L

lam_tr

Top Contributor
Stichwort "Super Type Token":
Java:
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
public abstract class ColumnMapper<T> {
  public static class Person {
    private String name;
    private String firstname;
    private String lastname;
  }
  public ColumnMapper() {
    // Ich suche an der Stelle die Felder von T
    ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
    Class<?> typeArgument = (Class<?>) pt.getActualTypeArguments()[0];
    Field[] fields = typeArgument.getDeclaredFields();
    for (Field field : fields) {
      System.out.println(field.getName());
    }
  }
  public static void main(String[] args) {
    ColumnMapper<Person> columMapper = new ColumnMapper<Person>(){};
  }
}
Siehe auch verwandten Post: https://www.java-forum.org/thema/wildcard-und-class-type.189656/
Das habe ich gestern in einigen Beispielen auch schon gesehen
Java:
this.getClass().getGenericSuperclass();
aber der Aufruf hatte mich etwas verwirrt. GernericSuperclass hört sich ein bisschen nach Basisklasse an. Das Model Person leitet aber von keiner klasse. So wie es aussieht, klappts, Danke!
 
L

LimDul

Top Contributor
Das habe ich gestern in einigen Beispielen auch schon gesehen
Java:
this.getClass().getGenericSuperclass();
aber der Aufruf hatte mich etwas verwirrt. GernericSuperclass hört sich ein bisschen nach Basisklasse an. Das Model Person leitet aber von keiner klasse. So wie es aussieht, klappts, Danke!
Person nicht. Aber dein erzeugter ColumnMapper ist eine Anonyme Klasse, die von der abstrakten ColumnMapper Klasse ableitet.
 
L

lam_tr

Top Contributor
Person nicht. Aber dein erzeugter ColumnMapper ist eine Anonyme Klasse, die von der abstrakten ColumnMapper Klasse ableitet.
Ich habe das mit dem "abstract" komplett überlesen, jetzt ist alles klar. Das ist echt Mega Tricky.

Und wie kann ich es richtig machen, wenn ich eine abgeleitete Klasse davon erzeuge?

Java:
public class BaseColumnMapper<T> {

    public BaseColumnMapper() {
        ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
        Class<?> typeArgument = (Class<?>) pt.getActualTypeArguments()[0];
        Field[] fields = typeArgument.getDeclaredFields();
        for (Field field : fields) {
            System.out.println(field.getName());
        }
    }

    public static class ColumnMapper<S> extends BaseColumnMapper<S> {
    }

    public static void main(String[] args) {
        ColumnMapper<Person> columMapper = new ColumnMapper<>();
    }
}

Dann bekomme ich diesen StackTrace
Java:
Exception in thread "main" java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class

Warum klappt das mit der abstrakten Klasse aber mit der Abgeleiteten nicht?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Java erkennt eine deklarierte Variable nicht Java Basics - Anfänger-Themen 2
F in for-Schleife deklarierte Variablen erhalten? Java Basics - Anfänger-Themen 6
T Deklarierte Variable? Java Basics - Anfänger-Themen 3
Elyt Bei Monopoly werden Felder übersprungen Java Basics - Anfänger-Themen 2
L Listen und Felder Java Basics - Anfänger-Themen 2
neerual Int-Felder erzeugen Java Basics - Anfänger-Themen 16
P Felder König array Java Basics - Anfänger-Themen 6
T Art 4 Felder Matrix Memory Java Basics - Anfänger-Themen 2
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
D Felder Java Basics - Anfänger-Themen 2
D Übung Felder java Error kompilieren Java Basics - Anfänger-Themen 4
M Felder leer - überprüfen? Java Basics - Anfänger-Themen 2
S reflection und felder Java Basics - Anfänger-Themen 12
X Verknüpfte Excel Felder mitändern Java Basics - Anfänger-Themen 6
Z Erste Schritte 9x9 Felder Erzeugen+Aufrufen Java Basics - Anfänger-Themen 1
S Wie instanziert man Felder? Java Basics - Anfänger-Themen 11
V Zwei Felder Adderen Java Basics - Anfänger-Themen 2
W Methoden Falsche Felder von Methode belgegt Java Basics - Anfänger-Themen 14
M Spielfeld mit 10x10 Felder Java Basics - Anfänger-Themen 13
E Felder bei falscher Eingabe leeren Java Basics - Anfänger-Themen 8
S Felder mit Variablen/Tabellen verknüpfen! Java Basics - Anfänger-Themen 3
M Felder mit Methode verändern Java Basics - Anfänger-Themen 11
W Datentypen Felder mit Potenzen Java Basics - Anfänger-Themen 31
C Erste Schritte felder, die public final sind Java Basics - Anfänger-Themen 6
B Frage zur Effizienz - alle Array-Felder initialisieren oder jedes Feld auf null prüfen? Java Basics - Anfänger-Themen 4
C Felder(Größte Zahl, Index) Java Basics - Anfänger-Themen 6
K Felder Java Basics - Anfänger-Themen 5
M 3 Felder, Barcode, reinschreiben in die DB Java Basics - Anfänger-Themen 30
D Datentypen Felder: Deklaration und Initialisierung Java Basics - Anfänger-Themen 5
C Java Felder bearbeiten Hilfe Java Basics - Anfänger-Themen 4
H Felder mit unterschiedl. Typen sortieren Java Basics - Anfänger-Themen 5
B n-dimensionale Felder in m-dimensionale Felder konvertiert Java Basics - Anfänger-Themen 30
H felder vergleichen Java Basics - Anfänger-Themen 6
F Felder von aufrufender Klasse ändern Java Basics - Anfänger-Themen 16
A Felder Java Basics - Anfänger-Themen 7
A Mehrdimensionale Felder Java Basics - Anfänger-Themen 18
C Felder im Dialog zurücksetzen Java Basics - Anfänger-Themen 3
E Wechselnde Felder erzeugen Java Basics - Anfänger-Themen 15
maddin86 Eine Methode für ein- und zweidimensionale double Felder als Parameter? Java Basics - Anfänger-Themen 5
A Felder- Minimum/Maximum Java Basics - Anfänger-Themen 2
D Felder Java Basics - Anfänger-Themen 7
D Felder Java Basics - Anfänger-Themen 2
T Border Layout alle mittleren felder gleich groß Java Basics - Anfänger-Themen 3
C Speicherverwaltung für Felder Java Basics - Anfänger-Themen 8
S EINDIMENSIONALE FELDER? Java Basics - Anfänger-Themen 23
G 3. Aufgaben und komme nicht weiter (Felder, Methoden) Java Basics - Anfänger-Themen 3
M Felder (Wo liegt der Fehler?) Java Basics - Anfänger-Themen 2
D Wie werden Felder grau? Java Basics - Anfänger-Themen 26
S generische Felder Java Basics - Anfänger-Themen 2
A Felder Java Basics - Anfänger-Themen 3
D String mit split teilen und leere Felder behalten Java Basics - Anfänger-Themen 4
R Felder unterschiedlichen Typs Java Basics - Anfänger-Themen 9
J 2 Felder aus DB selektieren u. in JList - eines verstecken? Java Basics - Anfänger-Themen 7
T Suche über mehrere Felder value = key = value Java Basics - Anfänger-Themen 3
B Array doppelt Felder löschen Java Basics - Anfänger-Themen 27
B clone(), Clonable und Felder von Interfacetypen Java Basics - Anfänger-Themen 3
G Felder kopieren Java Basics - Anfänger-Themen 8
G Felder-Länge Java Basics - Anfänger-Themen 2
G Felder zurückgeben? Java Basics - Anfänger-Themen 3
C Früheste Datum aus 3 Felder Java Basics - Anfänger-Themen 20
M Felder innerhalb eines Arrays vergleichen Java Basics - Anfänger-Themen 2
D Felder vergleichen Java Basics - Anfänger-Themen 14
D Verbindung von Methoden und Felder Java Basics - Anfänger-Themen 3
A Aus dem menü heraus andere Felder bearbeiten Java Basics - Anfänger-Themen 2
S Statische Felder - statische Methoden Java Basics - Anfänger-Themen 2
G variable felder in java? geht das? Java Basics - Anfänger-Themen 4
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
U Compiler-Fehler Programmierung einer Drehkugel Java Basics - Anfänger-Themen 8
T Bestimmte Zahlen ausgeben mit einer whilfe Schleife Java Basics - Anfänger-Themen 21
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
O Namen (mit Umlauten und ß) in einer ArrayList suchen Java Basics - Anfänger-Themen 5
A eine neue normale String-Array von einer String-Array, die in for schleife ist, schaffen Java Basics - Anfänger-Themen 3
itsmejo Erste Schritte Auf Attribut einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 14
DorFey Schrittweises abändern des GUI während for-Schleife / pausieren einer for-Schleife Java Basics - Anfänger-Themen 3
R Implementieren einer iterativen und rekursiven Klassenmethode. Java Basics - Anfänger-Themen 1
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
J Übergeben einer Objektreferenz Java Basics - Anfänger-Themen 6
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
P Veränderungen einer ObservableList Java Basics - Anfänger-Themen 10
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
O BiPredicate in einer forEach Methode Java Basics - Anfänger-Themen 10
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
V Variablen statische Variable einer Objektvariable zuordnen Java Basics - Anfänger-Themen 3
M Letztes Element einer ArrayList Java Basics - Anfänger-Themen 12
L Wie greife ich in der Subklasse auf die Parameter einer Methode der Superklasse zu ? Java Basics - Anfänger-Themen 15
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 21
E Rückwärtsmultiplikation einer invertierten matrix Java Basics - Anfänger-Themen 2
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
S Erzeugen einer eindeutigen ID Java Basics - Anfänger-Themen 2
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
B Objektverwaltung mit ArrayList in einer seperaten Klasse Java Basics - Anfänger-Themen 24
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Anzeige

Neue Themen


Oben