J'ai une méthode dans une de mes classes utilitaires qui prend une collection et un objet de classe, et retourne une instance Iterable qui peut itérer sur tous les membres de la collection qui sont des instances de la classe spécifiée. Sa signature est:Comment puis-je convertir un type générique en type générique avec un paramètre générique?
public static <T> Iterable<T> iterable (
Iterable<? super T> source, Class<T> requiredClass);
Cela fonctionne très bien pour la plupart des cas d'utilisation, mais maintenant je dois l'utiliser avec une classe générique, Item<PROTOTYPE>
. Je comprends que je ne peux pas être certain que les articles retournés par le iterator résultant ne peut être garantie pour avoir un prototype particulier, j'ai donc essayé de jeter son retour comme suit:
Iterable<Item<?>> allItems = (Iterable<Item<?>>)
TypeCheckingIterator.iterable(source, Item.class);
Malheureusement cela renvoie une erreur de compilation « ne peut pas jeter Iterable<Item>
-Iterable<Item<?>>
"
Pourquoi ne peut-il effectuer cette fonte quand je peux me Item
-Item<?>
tout à fait heureux? Existe-t-il un moyen de forcer ce moulage, sans avoir à lancer explicitement les objets retournés par les itérateurs?
Dupe: http://stackoverflow.com/q/10869467/774444 –
@LouisWasserman qui souffre le exactement le même problème .. –