Ich habe einige Fragen, wenn ich genericType.First aller reflektieren, ich habe eine Klassendeklaration wie folgt aus:Wie reflektiere ich die Liste <T> der Klasse <T> und bekomme den Inhalt von T?
public class JoyPageWebDTO<T> {
private int recordCount;
private int pageSize;
private int pageIndex;
private List<T> records;
}
und T:
public class AuditSpuWebDTO implements Serializable {
private String indications;
private String forbidden;
private int shopID;
private String shopName;
private String city;
private Date updateTime;
private int auditStatus;
private String auditContent;
}
Das Ergebnis JoyPageWebDTO nach Anfrage wie folgt aus: [http://i.stack.imgur.com/zeK1O.jpg][1]
die Frage ist, wie kann ich die T (AuditSpuWebDTO
) von JoyPageWebDTO
bekommen? Ich möchte den Wert von AuditSpuWebDTO
bekommen. Ich schrieb einen Code wie folgt, um dies zu behandeln, jedoch fehlgeschlagen!
public static void reflect(Class<?> clazz) {
for (Field field : clazz.getDeclaredFields()) {
//get the static type of the field
Class<?> fieldType = field.getType();
//if it's String,
if (fieldType == String.class) {
// save/use field
}
//if it's String[],
else if (fieldType == String[].class) {
// save/use field
}
//if it's List or a subtype of List,
else if (List.class.isAssignableFrom(fieldType)) {
//get the type as generic
ParameterizedType fieldGenericType = (ParameterizedType) field.getGenericType();
//get it's first type parameter
Type type = fieldGenericType.getActualTypeArguments()[0];
Class<?> fieldTypeParameterClazz;
if (type instanceof ParameterizedType) {
fieldTypeParameterClazz = (Class<?>) ((ParameterizedType) type).getRawType();
} else if(type instanceof TypeVariable){
//todo how to get the class????
}else{
fieldTypeParameterClazz = (Class<?>) type;
}
//if the type parameter is String,
if (fieldTypeParameterClazz == String.class) {
// save/use field
}
}
}
}
Wenn ich über die generische Art reflektieren: T von List, der Typ des Ergebnisses ist TypeVariable
, wie kann ich die Class<?>
von TypeVariable
? Die todo
, die ich markiere, ist das entscheidende Problem, das ich habe.
Mögliche Duplikate von [Get generischen Typ der Klasse zur Laufzeit] (http://stackoverflow.com/questions/3403909/get-generic-type-of-class-at-runtime) – Sam
Schnelle Antwort: nicht möglich. – Sam