java - Java中的ArrayList方法toArray有@SuppressWarnings ("unchecked")注释

标签 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[] 吗?

提前致谢。

最佳答案

检查其 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 文档教程中的类型删除 http://docs.oracle.com/javase/tutorial/java/generics/erasure.html

它说:

将泛型类型中的所有类型参数(例如 T K V)替换为其边界,如果类型参数无边界,则将其替换为 Object。因此,生成的字节码仅包含普通的类、接口(interface)和方法。

关于java - Java中的ArrayList方法toArray有@SuppressWarnings ("unchecked")注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15049381/

相关文章:

java - 如何覆盖java中的泛型列表返回类型

java - 单元测试 - 无法加载 ApplicationContext

java - 无法从与类相同的文件夹加载 xml

ios - 注册和出列特定类型的 UITableViewCell

c# - 我在实现通用存储库时遇到问题

java - 在嵌套枚举实现接口(interface)中继承泛型类型

java - 如何加快java中数据集的读取过程

c# - 使用动态类型调用泛型方法

c# - 检查通用类型

java - 在 Java 8 中,为什么 ArrayList 的默认容量现在为零?