关于泛型问题

ZeerVi 2014-11-25 07:24:09
class DemoFanXing
{

public static void main(String[] args)
{
Arr<Integer> a=new Arr<Integer>();

a.setArray(1,2,3,4,5,6);
for(int x:a.getArray())
{System.out.print(x+" ");}
}
}

class Arr <T>
{ private T[] arr;
public <T> void setArray(T...arg)
{
this.arr=arg;
}
public T[] getArray()
{return arr;}
}
DemoFanXing.java:38: 错误: 不兼容的类型: T#1[]无法转换为T#2[]
this.arr=arg;
^
其中, T#1,T#2是类型变量:
T#1扩展已在方法 <T#1>setArray(T#1...)中声明的Object
T#2扩展已在类 Arr中声明的Object
注: DemoFanXing.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
1 个错误
...全文
102 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
oh_Maxy 2014-11-25
  • 打赏
  • 举报
回复
    public <E> void setArray(T... arg) {
        this.arr = arg;
    }
或者方法的泛型换个,别和类的泛型冲突即可(和作用域有关)
oh_Maxy 2014-11-25
  • 打赏
  • 举报
回复

    public void setArray(T... arg) {
        this.arr = arg;
    }
类的泛型已经定义了,无需再在方法里定义一个T,方法的T可能会被解析为另外一个类型E
wyc_ 2014-11-25
  • 打赏
  • 举报
回复
public <T> void setArray(T...arg) { this.arr=arg; }改为 public void setArray(T...arg) { this.arr=arg; } 其中T已经在class Arr <T>中声明了。
姜小白- 2014-11-25
  • 打赏
  • 举报
回复
将 public <T> void setArray(T...arg) 修改为 public <T> void setArray(T[] arg) 试试

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧