我正在阅读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 []的返回方式吗?
提前致谢。
答案 0 :(得分:0)
检查其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 docs tutorial http://docs.oracle.com/javase/tutorial/java/generics/erasure.html
中检查类型擦除它说:
将泛型类型中的所有类型参数(如T K V)替换为其边界,如果类型参数不受限制,则替换为Object
。因此,生成的字节码只包含普通的类,接口和方法。