Java 向函数传递/返回带有类型参数的类
让我们假设以下方法(比如从番石榴的可食性中): 我不知道如何调用Java 向函数传递/返回带有类型参数的类,java,generics,Java,Generics,让我们假设以下方法(比如从番石榴的可食性中): 我不知道如何调用filter并获取Iterable>a4=Iterables.filter(objs,Abc.class);//编译错误-Abc和Abc是不兼容的类型 Iterable>a6=Iterables.>a7=(Iterable().getClass());//编译错误 Iterable>a10=新HashSet我发现它可以编译 public static <T> Iterable<Abc<T>> my
filter
并获取Iterable>a4=Iterables.filter(objs,Abc.class);//编译错误-Abc和Abc是不兼容的类型
Iterable>a6=Iterables.>a7=(Iterable().getClass());//编译错误
Iterable>a10=新HashSet我发现它可以编译
public static <T> Iterable<Abc<T>> myFilter (Iterable<Abc<T>> myIterator) {
Class<Abc<T>> myClass = null;
Iterable<Abc<T>> a3 = Iterables.filter(myIterator, myClass);
return a3;
}
public static Iterable有正确答案 这个问题没有令人满意的答案。仅使用无界通配符参数化的类型的类文本在理论上是可行的,我们只是没有它们
您可以生成Class>ABC=(ClassI-see,但这意味着,我还可以执行以下任一操作:Iterable>a2=(Iterable@Jirka-x1是的,内联也可以。唯一的缺点是抑制警告的本地性较差。它可以编译,但是myclass
变量没有内容。但是我可以使用Ben建议的方法:(Abc)(Object)Abc.class
来分配它。
Set<?> objs = ...;
Iterable<String> a2 = Iterables.filter(objs, String.class);
static class Abc<E> {
E someField;
}
Iterable<Abc> a3 = Iterables.filter(objs, Abc.class);
Iterable<Abc<?>> a4 = Iterables.filter(objs, Abc.class); // Compile error - Abc and Abc<?> are incompatible types
Iterable<Abc<?>> a5 = Iterables.filter(objs, Abc<?>.class); // Compile error
Iterable<Abc<?>> a6 = Iterables.<Abc<?>>filter(objs, Abc.class); // Compile error
Iterable<Abc<?>> a7 = (Iterable<Abc<?>>) Iterables.filter(objs, Abc.class); // Compile error - inconvertible types
Iterable<Abc<?>> a8 = Iterables.filter(objs, new Abc<?>().getClass()); // Compile error
Iterable<Abc<?>> a8a = Iterables.filter(objs, new Abc<Object>().getClass()); // Compile error
Iterable<Abc<String>> a9 = Iterables.filter(objs, Abc<String>.class); // Compile error
Iterable<Abc<?>> a10 = new HashSet<Abc<?>>();
for (Abc<?> a : Iterables.filter(objs, Abc.class)) {
((Set<Abc<?>>)a10).add(a);
}
public static <T> Iterable<Abc<T>> myFilter (Iterable<Abc<T>> myIterator) {
Class<Abc<T>> myClass = null;
Iterable<Abc<T>> a3 = Iterables.filter(myIterator, myClass);
return a3;
}
@SuppressWarnings("unchecked")
public static Class<Abc<?>> ABC = (Class<Abc<?>>)(Object) Abc.class;