我是否必须将 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
我的两个问题是:
最后一行,当我将列表创建为大小为 size
的对象时,为什么我必须将它转换为通用数组,因为它已经初始化为通用数组?
@SuppressWarnings("unchecked");
能解释一下吗?我可以看到它的作用,但我从未在 Java 书中的任何页面上看到 @SuppressWarnings
;我们如何从 @
开始??
旁注 - 此代码直接来自我的《数据结构》一书,我试图将其分解以理解它。
- 由于 type erasure,您必须将其重铸为
E[]
:在运行时,每个泛型都被视为 Object
。您不能将 listArray
初始化为 new E[]
.
@SuppressWarnings
是一个注解,基本上是命令式代码之外的额外信息。
您必须抑制 unchecked
,否则 Java 编译器会在遇到 Object[]
到 E[]
的潜在危险转换时警告您。
抱歉措辞不当,但也许代码可以更容易理解
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
;我们如何从@
开始??
旁注 - 此代码直接来自我的《数据结构》一书,我试图将其分解以理解它。
- 由于 type erasure,您必须将其重铸为
E[]
:在运行时,每个泛型都被视为Object
。您不能将listArray
初始化为new E[]
. @SuppressWarnings
是一个注解,基本上是命令式代码之外的额外信息。
您必须抑制 unchecked
,否则 Java 编译器会在遇到 Object[]
到 E[]
的潜在危险转换时警告您。