Vous ne pouvez pas obtenir un tel comportement avec ces données d'entrée. List<X>
liste attendait l'instance de classe X, mais vous essayez d'ajouter l'objet de type Class<? extends X>
. Imaginons que le type X est Number (pour simplifier), nous avons Double, Integer, Character et etc, children of Number. Donc, vous faites la prochaine chose: Vous voulez ajouter l'objet de type Class<Integer>
à la liste qui ne peut contenir que des numéros (pas un Class<Integer>
, Class<Double>
et ainsi de suite). La seule chose que vous pouvez faire, il est créer l'instance de Class<Integer>
, Class<Double>
cette façon, en utilisant la réflexion:
List<X> list = //some values;
Set<Class<? extends X>> set = //some values;
for (Class<? extends X> classx : set) list.add(classx.newInstance());
Mais qui est si mauvaise idée d'utiliser la réflexion de telle manière. Peut-être que vous vouliez dire quelque chose ceci:
List<Class<X>> list = //some values;
Set<Class<? extends X>> set = //some values;
for (Class<? extends X> classx : set) list.add(classx);
Parce que toujours le Class<X>
n'est pas la même chose que Class<? extends X>
. Mais peut-être que vous vouliez dire quelque chose comme ceci:
List<X> list = //some values;
Set<? extends X> set = = //some values;
for (X elem : set) list.add(elem);
un dernier air sympa et cela devrait fonctionner.
«X» et «Classe extends X>» sont des types très différents. Comme écrit, vous devez au moins créer une nouvelle instance de 'Class extends X>' en utilisant la réflexion. Est-ce que votre question sur la façon de créer une instance lorsque vous avez un 'Class >'? –
Copie possible de [Création d'une instance à l'aide du nom de classe et du constructeur appelant] (https://stackoverflow.com/questions/6094575/creating-an-instance-using-the-class-name-and-calling-constructor) –