Je veux créer un tableau de Classes, représentant chacune un type qui est disponible dans le système que je suis en train de construire. Toutes les Classes sont des sous-classes d'une commune de la super-classe. Donc je voudrais faire:
Class<? extends SuperClass>[] availableTypes = { SubClass1.class, SubClass2.class };
Cela me donne l'erreur:
Cannot create a generic array of Class<? extends SuperClass>.
Je reçois le même message si je tente de qualifier la création de la table sur le côté droit de l'initialisation:
Class<? extends SuperClass>[] availableTypes = Class<? extends SuperClass>[] { SubClass1.class, SubClass2.class };
Je peux obtenir le code à compiler si j'élimine médicaments génériques, les qualifications:
Class[] availableTypes = { SubClass1.class, SubClass2.class };
Mais puis-je obtenir les génériques d'avertissement:
La classe est une crue de type. Références de type générique de la Classe doit être paramétrée.
Je suis en train; j'essaie! :) Aussi, à ce stade, même si cela n'a pas de provoquer un avertissement, je perds un morceau de l'interface j'ai essayé de définir. Je ne tiens pas à retourner un tableau de l'arbitraire des classes; je veux retourner un tableau de classes qui sont toutes les sous-classes d'une classe mère!
Eclipse a un assez puissants outils pour comprendre quels sont les paramètres à utiliser pour résoudre les génériques des déclarations, mais dans ce cas, il tombe, car il tend à faire quand vous avez affaire avec Classe. Le "Déduire de Type Générique" Arguments de la procédure qu'il propose ne permet pas de modifier le code à tous, en laissant l'avertissement.
J'ai été en mesure de contourner ce problème en utilisant une Collection à la place:
List<Class<? extends SuperClass>> availableTypes = new List<Class<? extends SuperClass>>();
Mais quelle est la bonne façon de le faire avec des tableaux?