【发布时间】:2018-08-15 08:03:31
【问题描述】:
我读过一篇关于通配符捕获如何在 java 中工作的文章。 In this section,作者说明了编译器如何捕获通配符类型并进行一些转换。
但是我的困惑是在编译了以下代码之后出现的(代码本身没有任何意义,我只是想测试一下java中的通配符捕获):
public class Test {
public static void main(String[] args) {
}
public static void copy(List<?> src, List<?> dest) {
for (int i = 0; i < dest.size(); i++) {
dest.set(i, src.get(i));
}
}
}
我得到一个编译时错误:
Error:(9, 32) java: incompatible types: java.lang.Object cannot be converted to capture#1 of ?
根据那篇文章,编译器应该能够捕获通配符类型src并将其转换为List<capture#2>之类的东西
但是为什么错误说src.get(i)的类型是Object,而不是capture#2之类的东西?
如果该帖子有误,通配符捕获实际上是如何工作的?
【问题讨论】:
-
在我的eclipse中,错误信息是
The method set(int, capture#2-of ?) in the type List<capture#2-of ?> is not applicable for the arguments (int, capture#3-of ?) -
@AshishSingh 我使用
javac命令编译该文件,上面写着Object cannot be converted to CAP#1