我正在阅读 Josh Bloch 的《Effective Java》,并发现了第 24 条:消除未经检查的警告。
他们给出了生成未经检查的警告的类的 toArray() 方法的示例。
ArrayList.java:305: warning: [unchecked] unchecked cast
found : Object[], required: T[]
return (T[]) Arrays.copyOf(elements, size, a.getClass());
我不明白编译器如何诊断它将返回 Object[]?
可能我无法理解其背后的类型删除现象。
有人可以解释一下如何返回 Object[] 吗?
提前致谢。
最佳答案
检查其 API docs它清楚地表明了这一点
public static <T,U> T[] copyOf(U[] original,
int newLength,
Class<? extends T[]> newType)
第三个参数指定newType - 要返回的副本的类
其 return
语句指出
:
Returns:
a copy of the original array, truncated or padded with nulls to obtain the
specified length
检查this以及 Object[]
返回
和
What is more efficient: System.arraycopy vs Arrays.copyOf?
编辑: 检查 oracle 文档教程中的类型删除 http://docs.oracle.com/javase/tutorial/java/generics/erasure.html
它说:
将泛型类型中的所有类型参数(例如 T K V)替换为其边界,如果类型参数无边界,则将其替换为 Object
。因此,生成的字节码仅包含普通的类、接口(interface)和方法。
关于java - Java中的ArrayList方法toArray有@SuppressWarnings ("unchecked")注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15049381/