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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager