(Java泛型)为什么Object不能直接引用Integer内的值?? (后面有源代码) 5

publicinterfaceLList<T>{//线性表接口booleanisEmpty();//判断线性表是否为intlength();//返回线性表长度Tget(i... public interface LList<T> { //线性表接口
boolean isEmpty(); //判断线性表是否为
int length(); //返回线性表长度
T get(int i); //返回第i个元素
T search(T key); //查找返回首次出现关键字为key的元素
}
public class SeqList<T> implements LList<T>
{
private Object[] element;
private int len;
public SeqList(int size)
{
this.element=new Object[size];
this.len=0;
}
public SeqList()
{
this(64);
}
public SeqList(T[] arr)
{
if(this.len==arr.length)
{
Object[] temp=this.element;
this.element=new Object[temp.length*2];
for(int j=0;j<temp.length;j++)
this.element[j]=temp[j];
}
for(int k=0;k<arr.length;k++)
this.element[k]=arr[k];
this.len=arr.length;
}
public boolean isEmpty()
{
return this.len==0;
}
public int length()
{
return this.len;
}
public T get(int i)
{
if (i>0&&i<this.len)
return (T)this.element[i];
return null;
}
public int indexOf(T key)
{
if(key!=null)
for (int i=0;i<this.len;i++)
if (this.element[i].equals(key))
return i;
return -1;
}
public T search(T key) //返回首次的关键字为key的元素
{
int find =this.indexOf(key);
return find==-1?null:(T)this.element[find];
}
public boolean contain(T key)
{
return this.indexOf(key)>=0;
}
}
public class Test {
public static void main (String[] args){
Integer[] s={12,2,34,45,12,3,21,12,2,6,7};
SeqList<Integer> list=new SeqList<Integer> (s);

}

}
报错代码段:
public SeqList(T[] arr)
{
if(this.len==arr.length)
{
Object[] temp=this.element;
this.element=new Object[temp.length*2];
for(int j=0;j<temp.length;j++)
this.element[j]=temp[j];
}
for(int k=0;k<arr.length;k++)
this.element[k]=arr[k];
this.len=arr.length;
}
里面的
his.element[k]=arr[k];

SeqList<Integer> list=new SeqList<Integer> (s);
展开
 我来答
百度网友ff759b7
2015-01-09 · 超过10用户采纳过TA的回答
知道答主
回答量:27
采纳率:0%
帮助的人:15.6万
展开全部
int find =this.indexOf(key);return this.indexOf(key)>=0;这两句是不对的!泛型有个特点叫“擦除”,在编译时会被擦除到它的边界。而key要求在编译后需要是一个确切的值,你这里key是泛型,在编译后不是一个确切的对象。所以你这段代码是会报错的
更多追问追答
追问
这个没问题的,问题在前面的构造方法SeqList(T[] arr)的this.element[k]=arr[k];报错,这句应该怎么改?
追答
还是泛型边界擦除的问题,不要用泛型,直接用Object:
public SeqList(Object[] arr)
{
...
}
羽落huang
2015-01-09 · TA获得超过161个赞
知道小有建树答主
回答量:206
采纳率:96%
帮助的人:82.9万
展开全部
肯定不行啊 需要转换类型
追问
怎么改,求指教
追答
因为我也不怎么会  所以我只能给你一个简单的例子   
假设 int i=0; 要输出object类型 则需要强制类型转换

object o=(object) i;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式