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

我是否必须将java中已经通用的数组强制转换为通用类型,java,list,generics,data-structures,annotations,Java,List,Generics,Data Structures,Annotations,很抱歉这样的措辞,但也许代码更容易理解 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 priv

很抱歉这样的措辞,但也许代码更容易理解

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
公共类通用实现列表
{
私有静态最终int defaultSize=10;//默认大小
private int maxSize;//列表的最大大小
private int listSize;//列表中项目的当前#
private int curr;//当前元素的位置
私有E[]listArray;//包含列表元素的数组
泛型()
{
这(默认大小);
}
/**
*创建一个新的列表对象
*@param siz Max#元素列表可以包含
*/
@SuppressWarnings(“未选中”)//通用数组分配
通用(整数大小)
{
最大尺寸=尺寸;
listSize=curr=0;
listArray=(E[])新对象[size];//创建listArray
我的两个问题是:

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


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

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

  • 您必须将其重新命名为
    E[]
    ,因为:在运行时,每个泛型都被视为
    对象
    。您不能将
    列表数组
    初始化为
    新的E[]

  • @SuppressWarnings
    是一个注释,基本上是命令式代码之外的额外信息

  • 您必须取消选中
    ,否则Java编译器在遇到
    Object[]
    E[]
    的潜在危险转换时会警告您数组不是泛型的,并且在运行时(由于类型擦除)每个泛型的类型都是
    对象
    @SuppressWarnings
    是一个。它们是在1.5版中引入的,任何新书都应该提到它们:)