什么时候适合使用空白的最终变量?

2022-09-04 05:43:42

我正在查看有关最终变量的另一个问题,并注意到您可以在不初始化它们(空白的最终变量)的情况下声明最终变量。这样做是可取的,什么时候是有利的吗?


答案 1

这对于创建不可变对象非常有用:

public class Bla {
    private final Color color;

    public Bla(Color c) {this.color = c};

}

Bla是不可变的(一旦创建,它就无法改变,因为颜色是最终的)。但是,您仍然可以通过用各种颜色构建它们来创建各种Blas。

例如,另请参阅此问题

编辑

也许值得补充的是,“空白最终”在Java中具有非常特定的含义,这似乎在注释中造成了一些混乱 - 参见Java语言规范4.12.4

空白 final 是其声明缺少初始值设定项的最终变量。

然后,必须在构造函数中分配该空白的最终变量。


答案 2

在创建对象之前,类的最终属性必须分配一个值。因此,您可以为它们赋值的最后一点是构造函数。

这通常用于不可变对象

 public class Foo {

  private final Bar bar;

  public Foo(Bar bar) {
    this.bar = bar;
  }

  public Bar getBar() {
   return new Bar(bar);
 } 
}

维基对此有何看法

防御性复制。


推荐