Java中的ArrayList方法toArray具有@SuppressWarnings(“unchecked”)注释

时间:2013-02-24 06:47:15

标签: java generics

我正在阅读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 []的返回方式吗?

提前致谢。

1 个答案:

答案 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。因此,生成的字节码只包含普通的类,接口和方法。