J'ai Box<T>
et je veux connaître au runtime la classe de T
Donc pour Box<String> je veux String.class
How ?
J'ai Box<T>
et je veux connaître au runtime la classe de T
Donc pour Box<String> je veux String.class
How ?
Avec des instances tu vas avoir du mal, par contre avec des attributs déclarant le type paramétré, c'est envisageable.
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 import java.lang.reflect.ParameterizedType; public class Xx { public class Box<T> { } public class Test { public Box<String> a; public Box<Integer> b; } public static void main(String[] args) throws SecurityException, NoSuchFieldException { System.out.println(((ParameterizedType) Test.class.getField("a").getGenericType()).getActualTypeArguments()[0]); System.out.println(((ParameterizedType) Test.class.getField("b").getGenericType()).getActualTypeArguments()[0]); } }
mon problème c'est que je suis dans Box<T> donc c'est box elle même qui veut savoir la class de T
Salut,
Ce n'est pas possible puisque le code est générique.
La seule solution serait de forcer l'usage du type lors de l'initialisation, et de le conserver, par exemple :
a++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Box<T> { private final Class<T> type; public Box(Class<T> type) { if (type==null) { throw new NullPointerException(); } this.type = type; } }
Merci pour les réponses. Du coup j'ai fait comme le dit adiguba.
Snif
Partager