Bonjour,

je cherche à obtenir un ParameterizedType bien précis en java, celui correspondant soit à
HashMap<String,Map<String,String>> soit à Map<String,Map<String,String>>, sans préférence de l'un ou l'autre, car j'utilise un api JSON qui se base là dessus pour savoir quelle hierarchie d'objets elle doit créer.

Pour le moment j'utilise la solution suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
public static class myMap extends HashMap<String, Map<String,String>>{};
//....
ParameterizedType type = (ParameterizedType)myMap.class.getGenericSuperclass();
Mais je trouve assez moch de devoir créer une classe qui ne sera jamais instanciée juste pour ça. Le pendant avec interface étant encore pire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
public static abstract class myMap2 implements Map<String, Map<String,String>>{};
//.....
ParameterizedType type = (ParameterizedType)myMap2.class.getGenericInterfaces()[0]
J'avais aussi la possibilité d'implémenter ParameterizedType moi même, mais ce serait encore plus catastrophique (mais au moins ce seraient pas des classes jamais instanciées)

Alors, est-ce qu'en java il n'y a pas une méthode plus simple que j'aurais ratée?

quelquechose dans ce goût là, par exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
ParameterizedType type = new PType(Map.class)
   .setType(0,String.class)
   .setType(1,new PType(Map.class)
         .setType(0,String)
         .setType(1,String)
   );