从一篇博客上看到的,但是博主只是说类型擦除导致出错。
package simplejava;
import java.util.ArrayList;
public class ErasedTest {
public static void main(String[] args) {
ArrayList<String> arr = new ArrayList<String>();
arr.add("a");
arr.add("b");
accept(arr);
}
public static void accept(ArrayList<Object> al) {
for (Object o : al)
System.out.println(o);
}
}
我的理解是:泛型是编译的时候不同,运行时被擦除为原生类型,也就是 main 方法中的变量 arr 的类型变成了 ArrayList,accept 方法中的参数 al 的类型也同样变成了 ArrayList,既然这样,为什么编译的时候出现了这样的错误:
error: incompatible types: ArrayList<String> cannot be converted to ArrayList<Object>
然后,如果在 accept 方法中的参数类型从ArrayList<Object> al
改成ArrayList al
,这样就可以编译通过了,这其中是什么原因的?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.