Нет гарантии, что T
имеет конструктор без аргументов. Кроме того, людям нравится использовать интерфейсы, поэтому есть большая вероятность, что T
не будет конкретным.
Итак, предоставьте абстрактную фабрику для построения вашей Vec
. Подходящим типом является java.util.function.Supplier<T>
.
private final Supplier<T> dflt;
public Vec(Supplier<T> dflt) {
super();
this.dflt = Objectes.requireNonNull(dflt);
}
...
if (super.get(a)==null) {
super.insertElementAt(dflt.get(), a);
}
. Сконструировать как:
Vec<Donkey> donkeys = new Vec<>(BigDonkey::new);
java.util.Vector
методы должны быть synchronized
, хотя такая блокировка не очень полезна и ArrayList
обычно следует использовать вместо. Даже тогда подобный подклассы ломают LSP.