将Integer添加到String的通用ArrayList时编译时错误

use*_*926 0 java generics collections arraylist

我知道这个问题之前已被多次询问过,但我正在寻找基于类型擦除的答案.

为什么编译器在添加时Integer会出错ArrayList<String>?我希望通过类型擦除和add方法的字节码来理解这一点ArrayList.

Era*_*ran 7

这与类型擦除或字节代码无关.编译器在擦除泛型类型参数并生成字节代码之前会给出此错误.

当添加IntegerArrayList<String>,编译器只是给你一个错误,因为Integer不是一个子类的String.

泛型只是在编译时添加了一层类型安全.如果您使用raw ArrayList而不是ArrayList<String>,则可以将Strings和Integers 添加到您的ArrayList.但是,生成的字节码是一样的,不管你是否使用ArrayListArrayList<String>.