繁体   English   中英

我是否必须将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. 由于类型擦除 ,您必须将其重铸为E[] :在运行时,每个泛型都被视为Object 您不能将listArray初始化为new E[]
  2. @SuppressWarnings是一个注释,除命令性代码外,基本上是其他信息。

您必须unchecked因为否则Java编译器会在遇到Object[]E[]的潜在危险转换时向您发出警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM