【问题标题】:How it is possible to add element of List in List of Integer in Java如何在 Java 中的整数列表中添加列表元素
【发布时间】:2020-09-30 17:40:04
【问题描述】:

我对 Array List 的这种行为感到困惑。 有人可以解释一下吗

List list = new ArrayList();
list.add(1);
list.add("test");

List<Integer> integerList = new ArrayList<>();
integerList.add(123);
integerList.add(456);
integerList.addAll(list);

System.out.println(integerList);

如何在整数数组列表中添加字符串 有人可以分享一些资源来理解这些事情吗?

【问题讨论】:

  • 它之所以有效,是因为 Java 不会在运行时检查列表,并且 list 是用原始类型声明的,这基本上可以让您绕过编译时检查泛型相关的东西。不过,您应该收到警告。
  • 感谢@user 的评论。但我在那里没有看到任何警告。我对此很困惑。你能解释一下这是更多细节吗?
  • 我在您的代码的这一行收到警告:integerList.addAll(list); 您是说您没有收到该行的警告吗?

标签: java


【解决方案1】:

这里讨论原因:Are generics removed by the compiler at compile time

编译器会检查泛型,但在运行时之后不会检查。

正如@user 提到的,您的编译器/IDE 很可能会显示警告,例如

List 是原始类型。对泛型 List 的引用应该被参数化

【讨论】:

  • 为什么编译器会警告integerList.addAll(list);,而不是错误?
  • 因为第一个 ArrayList 是用原始类型声明的。见stackoverflow.com/a/2770692/12323248。如果第一行的类型是List&lt;Integer&gt; list = new ArrayList&lt;&gt;();List&lt;String&gt; list = new ArrayList&lt;&gt;();,那么编译器会在您尝试添加另一种类型时安全地指示错误。
猜你喜欢
  • 1970-01-01
  • 2022-01-09
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
相关资源
最近更新 更多