java - 具有最终未初始化字段的抽象类

标签 java oop

我想知道下面的代码是否有意义,因为编译器警告说“空白的最终字段对象可能尚未初始化”。有更好的方法吗?

public abstract Test {
  protected final ArrayList<Object> objects;
}

public TestSubA extends Test {

  public TestSubA() {
    objects = new ArrayList<Objects>(20);
    // Other stuff
  }
}

public TestSubB extends Test {

  public TestSubB() {
    objects = new ArrayList<Objects>(100);
    // Other stuff
  }
}

最佳答案

我会将字段设为 final 并强制构造函数向上传递值:

public abstract class Test {
  private final ArrayList<Object> objects;

  protected ArrayList<Object> getObjects() {
    return objects;
  }

  protected Test(ArrayList<Object> objects) {
    this.objects = objects;
  }
}

public class TestSubA extends Test {

  public TestSubA() {
    super(new ArrayList<Object>(20));
    // Other stuff
  }
}

public class TestSubB extends Test {

  public TestSubB() {
    super(new ArrayList<Object>(100));
    // Other stuff
  }
}

关于java - 具有最终未初始化字段的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2327509/

相关文章:

java - 为什么默认构造函数和参数化构造函数都在一个类中?

javascript - 从实例变量名中找出实例变量名

python - 字典类未初始化

java - 代号一 showNativePicker() 方法问题

java - 什么时候可以增加 jvm (-Xss) 的最大堆栈大小?

java - 您可以将类型参数 <T> 限制为多个特定类吗

java - Netty 处理程序的调用顺序是什么?

java - 将 8 位索引颜色转换为 RGB

ruby - 存储 Ruby 对象的集合

javascript - 在闭包内声明的类与没有闭包的标准类