是否有可能在Java中使用空构造函数创建泛型类

问题描述 投票:-1回答:3

是否可以使用空构造函数创建泛型类?

至此:

 public class ArrayListGeneric1<T> {
    private int capacity;
    private int size;
    private T [] array;


    public ArrayListGeneric1() {
        capacity = 1;
        array =  Array.newInstance(T.getClass(), capacity); //Cannot get the class for T
        size = 0;
    }
}

我只能找到需要传递元素的解决方案

java generics
3个回答
1
投票

是否可以使用空构造函数创建泛型类?

当然,不用ArrayList就可以使用通用数组:

 public class ArrayListGeneric1<T> {
    private int capacity = 1;
    private int size = 0;
    private Object[] array = new Object[capacity];

    public ArrayListGeneric1() {}

    public T get(int i) {
      return (T) array[i];
    }

    public void set(int i, T element) {
      array[i] = element;
    }
}

您实际上可以使用通用数组来实现,如果您将类型抽象化,并在创建实例时将其子类化:]

  public abstract class ArrayListGeneric1<T> {
    private int capacity = 1;
    private int size = 0;
    private T[] array = Array.newInstance(getElementType(), capacity);

    public ArrayListGeneric1() {}   

    Class<?> getElementType() {
      ParameterizedType pt = (ParameterizedType) getClass().getGenericSuperclass();
      Type[] typeArgs = pt.getActualTypeArguments();

      // Will fail if it's not a class type.
      return (Class<?>) typeArgs[0];
    }
  // ...
}

然后:

ArrayListGeneric1<String> list = new ArrayListGeneric1<String>() {}

演示:https://ideone.com/fgJ5dl


0
投票

是。下面给出的是Java OOTB类的示例:


0
投票

这没问题。 ArrayList是具有无参数构造函数的泛型类:

热门问题
推荐问题
最新问题