Java 泛型中的通配符不';行不通

Java 泛型中的通配符不';行不通,java,generics,Java,Generics,看看下面的代码,为什么dump的第二次调用没有被编译?如何在不删除通配符的情况下修复它 import java.util.ArrayList; import java.util.List; class Column<A, T extends Object> { } public class Generics { static void main(String[] args) { Integer i = 5; // this works List&l

看看下面的代码,为什么dump的第二次调用没有被编译?如何在不删除通配符的情况下修复它

import java.util.ArrayList;
import java.util.List;

class Column<A, T extends Object> {
}

public class Generics {

  static void main(String[] args) {
    Integer i = 5;

    // this works
    List<Column<Integer, ?>> columns1 = new ArrayList<Column<Integer, ?>>();
    dump(columns1, i);

    // this doesn't
    List<Column<Integer, String>> columns2 = new ArrayList<Column<Integer, String>>();
    dump(columns2, i);
  }

  static <A, T> void dump(Iterable<Column<A, ?>> columns, A value) {
    for (Column<A,?> col: columns) {
      System.out.println(col);
    }
  }

}
import java.util.ArrayList;
导入java.util.List;
类列{
}
公共类泛型{
静态void main(字符串[]参数){
整数i=5;
//这很有效
列表列1=新的ArrayList();
转储(第1列,i);
//这并不重要
List columns2=新的ArrayList();
转储(第2列,i);
}
静态空转储(Iterable列,一个值){
for(列列列:列){
系统输出打印项次(col);
}
}
}
JDK的编译器给出了

Generics.java:18: <A,T>dump(java.lang.Iterable<Column<A,?>>,A) in Generics cannot be applied to (java.util.List<Column<java.lang.Integer,java.lang.String>>,java.lang.Integer)
 dump(columns2, i);

    ^
1 error
Generics.java:18:Generics中的dump(java.lang.Iterable,A)不能应用于(java.util.List,java.lang.Integer)
转储(第2列,i);
^
1错误

由于
dump()
中的
充当对象的生产者,因此需要使用
扩展
声明它(一般规则是“生产者-
扩展
,消费者-
超级
”):

静态空转储(Iterable>列,一个值){
for(列列列:列){
系统输出打印项次(col);
}
}

我只想补充一点,方法转储中的T类型声明实际上根本不需要,而且与为列类声明的类级别T无关。哦,是的。当我还在办公室的时候,我将此作为一个最小的工作示例进行编译。必须检查原始代码中是否也存在此缺陷。谢谢。原来T声明是一个遗留的东西,在原始代码中也不再使用了。再次感谢。
static <A, T> void dump(Iterable<? extends Column<A, ?>> columns, A value) {
    for (Column<A,?> col: columns) {
        System.out.println(col);
    }
}