java - 通配符类型匹配 - Java

标签 java generics

为什么下面的代码不能编译?

public static <T> void foo_test(List<? extends T> src, List<T> dest) {
   for (T o : src) {
        dest.add(o);
   }
}

public static void main(String [] args) {
   List<Number> numbers = new ArrayList<Number>();
   List<Integer> integers = new ArrayList<Integer>();
   foo_test(numbers, integers);
}

最佳答案

您不应该也不能将数字列表添加到整数列表;数字可能不是整数。但是,您可以将整数列表添加到数字列表,即您键入的内容的倒数。

这会起作用:

foo_test(integers, numbers);

具体来说,T 在您的代码中被推断为 Integer,但 Number 不会扩展 Integer , 所以这个调用是一个编译器错误。

切换到 foo_test(integers, numbers) 使得 T 被推断为 Number,并且 Integer 确实扩展了 Number, 以便编译。

关于java - 通配符类型匹配 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27029606/

相关文章:

java - 更新适配器后 ListView 失去位置 listView.setAdapter(new MyAdapter(...))

java - 在 hadoop 中将 json 数据保存在 hdfs 中

.net - IEnumerator<T>.Current 和 IEnumerator.Current 之间的关系以及为什么 IEnumerator<T> 实现 IDisposable

r - 为原始函数的隐式 S4 泛型添加额外参数

java - 玩Java,如何读取本地JSON文件并在body上显示为列表?

java - 在 Eclipse Debug模式下复制对象的整个树

java - 抽象类和子类中的静态变量初始化

swift - 无法推断通用参数 "T"

swift - 特定于枚举成员的通用约束

Java 泛型返回动态类型