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 个错误
------解决思路----------------------
将 public <T> void setArray(T...arg) 修改为 public <T> void setArray(T[] arg) 试试
------解决思路----------------------
public <T> void setArray(T...arg)
{
this.arr=arg;
}改为
public void setArray(T...arg)
{
this.arr=arg;
}
其中T已经在class Arr <T>中声明了。
------解决思路----------------------
public void setArray(T... arg) {
this.arr = arg;
}
类的泛型已经定义了,无需再在方法里定义一个T,方法的T可能会被解析为另外一个类型E
------解决思路----------------------
public <E> void setArray(T... arg) {
this.arr = arg;
}
或者方法的泛型换个,别和类的泛型冲突即可(和作用域有关)