是否可以在Java中创建一个具有空构造函数的泛型类



是否可以创建一个具有空构造函数的泛型类?

类似的东西:

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;
}
}

我只能在需要通过元素的地方找到解决方案

是否可以创建一个具有空构造函数的泛型类?

当然,不使用泛型数组,就像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

是。下面是Java OOTB类的一个例子:

public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
private int size;
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
/**
* Constructs an empty list with an initial capacity of ten.
*/
public ArrayList() {
this(10);
}
...
...
...
}

这不是问题。ArrayList是一个没有args构造函数的泛型类:

List<Integer> a = new ArrayList<>();
List b = new ArrayList<>();
var c = new ArrayList<>();

您可以在这里找到示例性的实现。

最新更新