Можно ли создать обобщенный c класс с пустым конструктором?
Конечно, сделать это без универсального c массива, как это делает 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;
}
}
На самом деле вы можете сделать это с массивом generi c, если вы сделаете тип абстрактным и создадите подкласс при создании экземпляра:
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