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
 

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
A Felder: arithmetisches und geometrisches Mittel Java Basics - Anfänger-Themen 1
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 Wie kann ich den Index i von einer LinkedList überprüfen? Java Basics - Anfänger-Themen 36
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
D mehrere Berechnungen in einer Methode Java Basics - Anfänger-Themen 9
P Iterieren mit einer Foreach in Lambdaschreibweise und Counter. Java Basics - Anfänger-Themen 1
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
U Wie ein Attribut von einer Klassenmethode in der Klasse speichern= Java Basics - Anfänger-Themen 2
M Wie richte ich eine Diagonale an Robotern in einer World ein? Java Basics - Anfänger-Themen 15
YAZZ BlueJ Bewegung einer Figur im Kreis Java Basics - Anfänger-Themen 4
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
A Verarbeiten einer Excel Datei durch das java-Programm Java Basics - Anfänger-Themen 3
B GUI extension mit einer Liste verbinden Java Basics - Anfänger-Themen 1
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
S Hilfe bei Programmierung einer Hotelabrechnung Java Basics - Anfänger-Themen 5
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
D Grösste Zahl in einer Folge herausfinden. (ULAM) Java Basics - Anfänger-Themen 9
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
I Array einer Methode wiedergeben Java Basics - Anfänger-Themen 2
I Argumente einer Java Methode Java Basics - Anfänger-Themen 14
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
AmsananKING Aussortierung einer Liste Java Basics - Anfänger-Themen 8
Poppigescorn Häufigkeit einer zahl zählen Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
C Auf die Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 1
C Initialiseren einer Superklasse Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben