J'ai un problème similaire et j'ai trouvé une solution qui fonctionne pour moi! Cela peut être fait mais cela peut ne pas être fiable (c'est-à-dire que cela ne fonctionne pas dans toutes les situations). Vous devez d'abord obtenir le "Champ" (via des réflexions). Ensuite, récupérez le "GenericType". Ensuite, essayez de convertir ceci en "ParameterizedType". C'est possible s'il y a un paramètre. Ensuite, obtenez "ActualTypeArguments". Habituellement, ce sont des classes, donc vous pouvez les lancer (sinon vous pouvez essayer Class.forName (...)) et vous avez déjà le type des éléments dans la liste.
Toutefois, ce travail ne marche pas si je fais ceci:
class MyList extends List<String> {... }
Et puis plus tard:
MyList list = new MyList(); // This would be List<String>
vous aviez réellement besoin d'inspecter le type pour voir si elle est une liste et si il a un type déclaré dans n'importe quelle classe ou interface. Mais il pourrait y en avoir plus d'un et le type pourrait être lié à plusieurs interfaces, pas seulement à une classe. bien sûr, vous pouvez simplement ignorer les propriétés qui ne sont pas "List" et peut-être jeter une erreur de compilation s'il y en a une (je ferai probablement cela).
Ensuite, il y a le problème avec les caractères génériques: List list = ... Tout ce que vous pouvez faire est de le remplacer par "Object", mais ce n'est pas sûr si vous voulez ajouter des éléments à la liste! (encore une fois, vous pouvez vérifier cela au moment de la compilation et lancer une erreur s'il y a des caractères génériques)
Une autre solution consiste à utiliser une liste vérifiée (voir Collections.checkedList (List, Class)) et essayer d'obtenir ce type à l'exécution (Vous avez probablement besoin de réflexion pour cela). Cela fonctionnerait beaucoup mieux et serait beaucoup plus robuste que les génériques.
Comment 'List' est-il créé initialement? –