无法添加到通用数组

时间:2014-07-23 20:16:14

标签: java arrays generics

无法在其他地方找到,所以这里是:我试图创建一个包含一个包含给定类型对象的数组的泛型类。我有其余的代码有点工作,但由于某种原因,我无法使用类型作为参数调用我的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)

2 个答案:

答案 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 {}