Java 无法使用通配符调用泛型方法

Java 无法使用通配符调用泛型方法,java,generics,Java,Generics,我有一个这样定义的类: public class Test { static <T> List<Class<T>> filter(List<Class<T>> input) { // code here } public static void main(String[] args) { List<Class<? extends Throwable>> l

我有一个这样定义的类:

public class Test {
    static <T> List<Class<T>> filter(List<Class<T>> input) {
        // code here
    }

    public static void main(String[] args) {
        List<Class<? extends Throwable>> list =
            new ArrayList<Class<? extends Throwable>>();
        filter(list);
    }
}

我不明白为什么
没有绑定到
啊,通用签名的乐趣

您可以通过将参数声明为:

static <T> List<Class<T>> filter(List<Class<? extends T>> input) {
    // code here
}

静态列表过滤器(List我认为这里的问题是没有适合
的类型

考虑一下,为了简单起见,我们是否将
替换为
原子引用

static <T> void filter(List<AtomicReference<T>> input) {
    T value = input.get(0).get();
    input.get(1).set(value);
}
静态无效过滤器(列表输入){
T value=input.get(0.get();
输入.获取(1).设置(值);
}
如果
输入
原子参考
原子参考
组成,我们将遇到麻烦


在存在多态性的情况下,指向指针的潜在问题是困难的。没有泛型,我们可以直接挥手挥手。有了泛型,我们需要真正有意义。

您还可以编写main,如下所示:

public static void main(String[] args) {
    List<Class<Throwable>> list =
        new ArrayList<Class<Throwable>>();
    filter(list);
}
publicstaticvoidmain(字符串[]args){
列表=
新的ArrayList();
过滤器(列表);
}

可能值得检查一下,它修复了调用方法时的错误(尽管我不明白为什么),但现在我在方法内部出现了一个错误。基本上,我有一个保存结果的
列表,我不能向其中添加条目,因为
ClassThe O'Reilly“Java Generic and Collections”一书()如果你想了解泛型是如何工作的,这也是一个很好的投资。很好的例子。它开始有了一些意义。最后一行应该是
input.get(1).set(value)
(我不允许编辑1个字符)。
public static void main(String[] args) {
    List<Class<Throwable>> list =
        new ArrayList<Class<Throwable>>();
    filter(list);
}