【发布时间】:2023-04-09 14:05:02
【问题描述】:
场景:类中的方法 addList 需要 List 的 Integer 对象。 main 方法发送一个包含多种类型对象的ArrayList 参数,而不仅仅是Integer。
结果:调用addList方法成功,也可以取回ArrayList中存储的对象并打印出来。
问题:难道我们不应该期望在运行时在被调用方法中接收到列表时,会验证其内容并导致一些异常吗?
但是,在addList 方法中,如果我尝试在ArrayList 中插入非Integer 对象,它只会在编译时失败。
这是否意味着 Diamond 运算符约束仅在将对象插入到集合中时?
请注意,erasure-in-generics 是不同的问题,不提供此问题的答案。
package com.rnd.nirav;
import java.util.ArrayList;
import java.util.List;
public class OverRidingTest {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(Integer.valueOf(1));
list.add("Nirav");
list.add(Float.valueOf(1.1f));
addList(list);
}
public static void addList(List<Integer> list) {
list.add("Khandhedia"); // This fails as expected.
System.out.println("List size = " + list.size());
Iterator itr = list.iterator();
while(itr.hasNext())
{
System.out.println("Element is " + itr.next());
}
}
}
【问题讨论】:
标签: java list arraylist diamond-operator