无法在其他地方找到,所以这里是:我试图创建一个包含一个包含给定类型对象的数组的泛型类。我有其余的代码有点工作,但由于某种原因,我无法使用类型作为参数调用我的add
方法。这是一个例子:
public class Generic<E extends Item> {
private E[] items = (E[])(new Object[5]);
public void add(E neu) {
this.items[0] = neu;
}
public void problematic(Class<E> clazz) {
E neu = clazz.newInstance();
this.items.add(neu); // this line is the problem
}
}
给定的错误是&#34;无法在数组类型E []&#34;
上调用Add(E)答案 0 :(得分:2)
array
没有add()
方法,因此编译失败,将其更改为ArrayList
,因为看起来您不知道数组的初始大小
答案 1 :(得分:1)
我想而不是 this.items.add(neu); 使用方法调用add() this.add(neu);
但是你总是添加到数组[0]你真的想这样做吗?
另外(E [])(new Object [5]);是一个不安全的演员,因为Jigar Joshi发布了使用ArrayList 一个工作的例子:
import java.util.ArrayList;
public class Generic <E extends Item> {
private ArrayList<E> items = new ArrayList<E>();
public void add(E neu) {
this.items.add(neu);
}
public void problematic(E clazz) {
this.add(clazz); // this line is the problem
}
}
class Item {}
与对象数组相同
public class Gen <E extends Item> {
private Object[] items = new Object[5];
private int itemCounter = 0;
public void add(E neu) {
if(itemCounter < items.length){
this.items[itemCounter] = neu;
itemCounter +=1;
}
}
public int length()
{
return itemCounter;
}
// testing the class
public static void main(String[] args)
{
Item t0 = new Item();
Item t1 = new Item();
Item t2 = new Item();
Item t3 = new Item();
Item t4 = new Item();
Item t5 = new Item();
Gen<Item> g = new Gen<Item>();
g.add(t0);
g.add(t1);
g.add(t2);
g.add(t3);
g.add(t4);
g.add(t5); // ignored
System.out.println(g.length());
}
}
class Item {}