Un collègue vient de me montrer un truc très bizarre dans un code qu'il a fait et ça m'intrigue beaucoup.
Dans la certification que j'ai passé il n'y a pas très longtemps, ils insistaient bien sur le fait qu'aucune information sur les generics ne se retrouvait dans le bytecode compilé, et que par conséquent, on ne pouvait pas retrouver le type des éléments contenus dans une collection générique AU RUNTIME.
Pourtant, si j'ai une classe du style:
Apparemment, j'arrive à savoir que getTrucs renvoie une collection de Truc's en faisant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public class MaClasse{ public Collection<Truc> getTrucs(){} }
Comment ça se fait? J'ai du rater un épisode.
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 import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Collection; class Truc { } class MaClasse { private Collection<Truc> trucs; public Collection<Truc> getTrucs() { return trucs; } public static void main(String[] args) throws NoSuchMethodException { Method getter = MaClasse.class.getMethod("getTrucs"); Type type = getter.getGenericReturnType(); if (type instanceof ParameterizedType) { Type genericType = ((ParameterizedType) type).getActualTypeArguments()[0]; if (genericType instanceof Class) { Class<?> contentClass = (Class<?>) genericType; System.out.println(contentClass); } } } }
Partager