设计一个将可比较数据存储在数组中的泛型类

时间:2018-01-20 23:34:44

标签: java generics

我试图找出如何将tst.insert()和tsttxt.insert()的值存储到数组中。到目前为止,我唯一能做的就是让程序认识到它们在那里。当我尝试打印变量时,我得到了tst.insert()的最后一个值。我假设显示的是最后一个值,因为正在覆盖其他值。

public class genericdrive {
public static void main(String[] args) {
    collection<Integer> tst = new collection<>();
    collection<String> tsttxt = new collection<>();
    //System.out.println("If collection is empty return true: " + tst.isEmpty());
    tst.insert(45);
    tst.insert(43);
    tst.insert(90);
    tsttxt.insert("Jeff");
    tsttxt.insert("Rey");
  }
}

...

public class collection<T> extends genericdrive {
private T element;
private T[]array;
// collection<T> objt = new collection<>();

public void set(T element) {
    this.element = element;
}

public T get() {
    return element;
}

public <T> void insert(T i) {
    i = (T) element;
    //array[0]=<T> i;
}

}

1 个答案:

答案 0 :(得分:1)

考虑到array变量包含所有元素,您编写的insert函数不会将任何值推入其中。

如果私有变量应该是一个数组,那么这是一种解决方法。

尝试以下方法:

public class MyCollection<T> {
  private T element;
  private T[] array;

  MyCollection(){
     array = (T[]) Array.newInstance( Comparable.class , 0); 
  }

  public void set(T element) {
     this.element = element;
  }

  public T get() {
    return element;
  }

  public void insert(T i) {


     T[] temp = (T[])  Array.newInstance(array.getClass().getComponentType(), array.length + 1);
     temp[array.length] = i;
     System.arraycopy(array, 0, temp, 0, array.length);
     array = temp;
  }

}