Java 如何使用泛型参数将泛型类型强制转换为泛型类型?

Java 如何使用泛型参数将泛型类型强制转换为泛型类型?,java,generics,Java,Generics,我的一个实用程序类中有一个方法,该方法接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以迭代集合中作为指定类实例的所有成员。其签名为: public static <T> Iterable<T> iterable ( Iterable<? super T> source, Class<T> requiredClass); publicstaticiterable( Iterable>) TypeCheckingIte

我的一个实用程序类中有一个方法,该方法接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以迭代集合中作为指定类实例的所有成员。其签名为:

public static <T> Iterable<T> iterable (
      Iterable<? super T> source, Class<T> requiredClass);
publicstaticiterable(
Iterable>)
TypeCheckingIterator.iterable(源、项、类);

不幸的是,这将返回一个编译器错误“无法从
Iterable
强制转换到
Iterable。如果您确信类型擦除是安全的,那么可以使用类型擦除

Iterable<Item<?>> allItems = (Iterable<Item<?>>) (Iterable)
                        TypeCheckingIterator.iterable(source, Item.class);
Iterable>allItems=

TypeCheckingIterator.Dupe:@LouisWasserman遇到了完全相同的问题..我无法让您的第二个解决方案工作。我得到了错误:参数化方法,并将第一个解决方案中的强制转换更改为(Iterable)避免原始类型警告。并非所有的
都相等。我会尝试引入
通配符,因为我不知道它对您有什么帮助。您可以使用
@SuppressWarning(“未选中”)
有一些强制转换,编译器无法确定是否安全。
Iterable<Item<?>> allItems = (Iterable<Item<?>>) (Iterable)
                        TypeCheckingIterator.iterable(source, Item.class);
Iterable<Item<?>> allItems =
                     TypeCheckingIterator.<Item<?>>iterable(source, Item.class);