Bonjour j'ai une simple classe générique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code text : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
this.type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
Mais là ça plante car getClass().getGenericSuperclass() retourne Object