如何将整数添加到字符串数组列表中?

2022-09-04 07:50:53
List list = new ArrayList<String>() ;
list.add(1) ;
Integer hello = (Integer) list.get(0) ;
System.out.println(hello);

上面的代码有一个 List 类型的引用,该引用 String 类型的 ArrayList 实例。当执行该行时,1 不是添加到 ArrayList(字符串类型)吗?如果是,那么为什么允许这样做?list.add(1)


答案 1

您使用了类型擦除,这意味着您忽略了以前设置的泛型检查。你可以摆脱这一点,因为泛型是一个编译时功能,在运行时不会检查。

您拥有的相同内容

List list = new ArrayList() ;
list.add(1) ;
Integer hello = (Integer) list.get(0) ;
System.out.println(hello);

List<Integer> list = new ArrayList<Integer>() ;
list.add(1) ;
Integer hello = list.get(0); // generics add an implicit cast here
System.out.println(hello);

如果您查看编译器生成的字节码,则无法区分。

有趣的是,你可以这样做

List<String> strings = new ArrayList<String>();
@SuppressWarnings("unchecked");
List<Integer> ints = (List) strings;
ints.add(1);

System.out.println(strings); // ok
String s= strings.get(0); // throws a ClassCastException

答案 2

问题是您的变量具有原始类型,您可以将任何类型的对象添加到此列表中。要解决问题,只需将其声明为 的 a:listListString

List<String> list = new ArrayList<String>() ;

推荐