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

Java中的ArrayList方法toArray具有@SuppressWarnings(“unchecked”注释),java,generics,Java,Generics,我在阅读Josh Bloch的《有效Java》时,遇到了第24条:消除未检查的警告 因为它们给出了类的toArray()方法的一个示例,该方法生成未检查的警告 ArrayList.java:305: warning: [unchecked] unchecked cast found : Object[], required: T[] return (T[]) Arrays.copyOf(elements, size, a.getClass()); 我不明白编译器是如何诊

我在阅读Josh Bloch的《有效Java》时,遇到了第24条:消除未检查的警告

因为它们给出了类的toArray()方法的一个示例,该方法生成未检查的警告

    ArrayList.java:305: warning: [unchecked] unchecked cast
    found : Object[], required: T[]
    return (T[]) Arrays.copyOf(elements, size, a.getClass());
我不明白编译器是如何诊断它将返回对象[]的

也许我无法理解它背后的类型擦除现象

谁能解释一下Object[]是如何返回的吗

提前谢谢。

检查一下它,它清楚地表明

public static <T,U> T[] copyOf(U[] original,
                           int newLength,
                           Class<? extends T[]> newType)
同时检查
Object[]
return 和

编辑: 在oracle文档教程中检查类型擦除

它说:


将泛型类型中的所有类型参数(如tkv)替换为它们的边界,或者如果类型参数是无界的,则替换
对象
。因此,生成的字节码只包含普通类、接口和方法。

是什么代码导致此警告启动?即使是通用版本也有注释。仍然有点困惑。但我无法了解对象[]是如何创建的?你能解释一下吗?我知道了copyOf方法返回对象[],而不是任何类型的T[],警告也是如此。@Sam正要注释同样的东西。有关详细信息,请查看此
Returns:
     a copy of the original array, truncated or padded with nulls to obtain the 
     specified length