api 说“返回指定集合的动态类型安全 View ” 但是当泛型可以在编译时检测到是否有任何可疑的东西被插入到集合中时,仍然需要它。
文档说“语言中的泛型机制提供了编译时(静态)类型检查,但有可能通过未经检查的强制转换来破坏该机制”
但即使这样也行不通
List<Integer> list = new ArrayList<Integer>();
Object o = new Float(1.2);
Integer i = (Integer)o; // line3
list.add(i);
但即使是这个也会在运行时失败并在第 3 行抛出 ClassCastException
因为 o 实际上持有一个 Float
,无法将其转换为 Integer
。所以,我想知道如何绕过静态编译时通用检查来证明 checkedList 方法的存在
最佳答案
这可以通过不使用泛型来完成,如果您使用的库是使用没有泛型的 Java 版本构建的,则可以做到这一点。
以下代码是如何使用泛型执行此操作的示例:
List<Integer> list = new ArrayList<Integer>();
List unsafeList = list; // Cast to a list that is not using generics
Object o = new Float(1.2);
unsafeList.add(o);
// list now contains a non Integer object.
这确实会产生几个警告,但您当然可以根据需要忽略这些警告。
关于java - Collections 类中 checkedList 方法的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29388331/