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

标签 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
    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;我们如何以@开头?

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

最佳答案

  1. 您必须将其重铸为 E[]因为type erasure :在运行时,每个泛型都被视为 Object 。您无法初始化listArraynew E[] .
  2. @SuppressWarnings是一个注释,基本上是除了命令式代码之外的额外信息。

你必须压制unchecked否则,当 Java 编译器遇到潜在危险的 Object[] 转换时,它会向您发出警告。至E[] .

关于java - 我是否必须将 java 中已经通用的数组转换为通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28133230/

相关文章:

java - 如何在java中验证上传的文件

list - 序言误解。将列表拆分为两个列表,其中偶数位置和奇数位置。我的错误在哪里?

java - 相同的源代码,Eclipse 构建成功但 Maven (javac) 失败

c# - 使用哪个通用集合?

java - 通配符符号的主要意图或目的?延伸 T'

java - Java 8 中的 interned 字符串是否适合垃圾回收?

java - 实现带有捏缩放功能的图库

java - UDP 客户端/服务器 ....包括用于过滤重复项的 16 位消息序列号

sql - Android - 如何排序列表

list - IE 中 <li> 项之间的空白