Bonjour j'ai une simple classe générique
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public class TestGen<T> {
private Class<T> type;
public Object a;
TestGen() throws Exception {
super();
Field field = TestGen.class.getDeclaredField("type");
System.out.println("Field " + field.getName() + " is of type "
+ field.getType().getSimpleName());
Type genericType = field.getGenericType();
if (genericType instanceof ParameterizedType) {
System.err.println("gen " + genericType);
ParameterizedType type = (ParameterizedType) genericType;
Type[] typeArguments = type.getActualTypeArguments();
for (Type typeArgument : typeArguments) {
System.out.println("Field " + field.getName()
+ " has a parameterized type of " + typeArgument);
//Class<?> classType = ((Class<?>) typeArgument);
//System.out.println("Field " + field.getName()
// + " has a parameterized type of " + classType.getSimpleName());
}
}
}
T getValue() {
return type.cast(a);
}
} |
je cherche à obtenir le type T pour valoriser le champ
private Class<T> type.
Mais à l'exécution je fais new TestGen<String>();.
j'obtiens
1 2 3
| Field type is of type Class
gen java.lang.Class<T>
Field type has a parameterized type of T |
la méthode getActualTypeArguments me retourne comme valeur T et non String
A+JYT
PS: j'ai lu qu'il fallait faire
this.type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
Mais là ça plante car getClass().getGenericSuperclass() retourne Object
Partager