Datentypen Deklarierte Felder einer Generic Klasse bestimmen

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
 

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
 

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/
 

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!
 

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.
 

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
U HILFE! - per ActionListener Felder enablen....... Java Basics - Anfänger-Themen 5
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
A Felder: arithmetisches und geometrisches Mittel 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
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Radius von einer ellipse bestimmen Java Basics - Anfänger-Themen 7
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
M Zufallszahl generieren mit einer linken und rechten Grenze Java Basics - Anfänger-Themen 3
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26

Ähnliche Java Themen

Neue Themen


Oben