Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
DatentypenDeklarierte Felder einer Generic Klasse bestimmen
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<>();
}
}
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
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
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>(){};
}
}
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>(){};
}
}
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!
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!