我是否必须将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版中引入的,任何新书都应该提到它们:)