试图修改Java向量';s get()在元素为null时生成新的T()

试图修改Java向量';s get()在元素为null时生成新的T(),java,vector,new-operator,Java,Vector,New Operator,如果我访问一个大于向量大小的元素,我试图修改Java向量以增大其大小。如果im访问未初始化的元素,则插入新元素 Eclipse抛出无法实例化类型Obj public static class Vec<Obj> extends Vector<Obj> { @Override public Obj set(int a, Obj b) { if (super.size()<=a) super.setSize(a+1);

如果我访问一个大于向量大小的元素,我试图修改Java向量以增大其大小。如果im访问未初始化的元素,则插入新元素

Eclipse抛出无法实例化类型Obj

public static class Vec<Obj> extends Vector<Obj> {
      @Override
      public Obj set(int a, Obj b) {
          if (super.size()<=a) super.setSize(a+1);
        return (Obj) super.set(a,b);
      }
      @Override
      public Obj get(int a) {
          if (super.size()<=a) super.setSize(a+1);
          if (super.get(a)==null) super.insertElementAt(  new Obj() , a);
        return (Obj) super.get(a);
      }
      public Vec () {
            super();  
        }
    }
公共静态类Vec扩展了Vector{
@凌驾
公共Obj集合(内部a、Obj b){

如果(super.size()不能保证
T
有一个无参数构造函数。而且,人们喜欢使用接口,所以
T
很有可能不是具体的

因此,为构建
Vec
提供一个抽象工厂。合适的类型是
java.util.function.Supplier

私人最终供应商dflt;
公共车辆信息中心(供应商dflt){
超级();
this.dflt=Objectes.requirennull(dflt);
}
...
if(super.get(a)==null){
super.insertElementAt(dflt.get(),a);
}
构造为:

    Vec<Donkey> donkeys = new Vec<>(BigDonkey::new);
Vec驴子=新的Vec(bigdask::new);

java.util.Vector
方法应该是
同步的
,尽管这样的锁定并不是真正有用的,而且通常应该使用
ArrayList
。即使这样,子类化也会破坏LSP。

Obj
是一种泛型类型;不能用
new
实例化泛型类型(但可能已经过时):
    Vec<Donkey> donkeys = new Vec<>(BigDonkey::new);