抱歉措辞,但也许代码可以更容易理解
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
我的两个问题是:
最后一行,当我将列表创建为大小为
size
的对象时,为什么在它已经初始化为通用数组的情况下必须将其转换为通用数组?能否解释一下
@SuppressWarnings("unchecked");
?我可以看到它的作用,但我从未在我的 Java 书中的任何页面上看到过 @SuppressWarnings;我们如何以@
开头?
旁注 - 这段代码直接来 self 的《数据结构》书,我试图将其分解以理解它。
最佳答案
- 您必须将其重铸为
E[]
因为type erasure :在运行时,每个泛型都被视为Object
。您无法初始化listArray
如new E[]
. -
@SuppressWarnings
是一个注释,基本上是除了命令式代码之外的额外信息。
你必须压制unchecked
否则,当 Java 编译器遇到潜在危险的 Object[]
转换时,它会向您发出警告。至E[]
.
关于java - 我是否必须将 java 中已经通用的数组转换为通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28133230/