1

我正在阅读 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[] 吗?

提前致谢。

4

1 回答 1

0

检查它的API 文档,它清楚地说

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

检查这个以及Object[]返回
什么更有效:System.arraycopy vs Arrays.copyOf?

编辑:在 oracle 文档教程http://docs.oracle.com/javase/tutorial/java/generics/erasure.html 中检查类型擦除

它说:

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

于 2013-02-24T07:13:35.357 回答