Java中的ArrayList方法toArray具有@SuppressWarnings(“unchecked”注释)
我在阅读Josh Bloch的《有效Java》时,遇到了第24条:消除未检查的警告 因为它们给出了类的toArray()方法的一个示例,该方法生成未检查的警告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()); 我不明白编译器是如何诊
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