我是否必须将 java 中的通用数组转换为通用类型

Do i have to cast an already generic array in java to a generic type

抱歉措辞不当,但也许代码可以更容易理解

public class Generic<E> implements List<E>
{
    private static final int defaultSize = 10; //Default size
    private int maxSize; //Maximum size of list
    private int listSize; //Current # of items in list
    private int curr; //Position of current element
    private E[] listArray; //Array holding list elements
    Generic()
    {
        this(defaultSize);
    }
    /**
    * Create a new list object
    * @param siz Max # of elements list can contain
    */
    @SuppressWarnings("unchecked") //generic array allocation
    Generic(int size)
    {
        maxSize = size;
        listSize = curr = 0;
        listArray = (E[]) new Object[size]; //create listArray

我的两个问题是:

  1. 最后一行,当我将列表创建为大小为 size 的对象时,为什么我必须将它转换为通用数组,因为它已经初始化为通用数组?

  2. @SuppressWarnings("unchecked");能解释一下吗?我可以看到它的作用,但我从未在 Java 书中的任何页面上看到 @SuppressWarnings;我们如何从 @ 开始??

旁注 - 此代码直接来自我的《数据结构》一书,我试图将其分解以理解它。

  1. 由于 type erasure,您必须将其重铸为 E[]:在运行时,每个泛型都被视为 Object。您不能将 listArray 初始化为 new E[].
  2. @SuppressWarnings是一个注解,基本上是命令式代码之外的额外信息。

您必须抑制 unchecked,否则 Java 编译器会在遇到 Object[]E[] 的潜在危险转换时警告您。