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

Rob*_*man 11 java final

我正在查看关于最终变量的另一个问题,并注意到你可以声明最终变量而不初始化它们(一个空白的最终变量).有没有理由这样做,什么时候有利?

ass*_*ias 28

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

public class Bla {
    private final Color color;

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

}
Run Code Online (Sandbox Code Playgroud)

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

另请参阅此问题.

编辑

也许值得补充一点,"空白决赛"在Java中具有非常特殊的含义,这似乎在评论中引起了一些混淆 - 参见Java语言规范4.12.4:

空白最终是一个最终变量,其声明缺少初始化程序.

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

  • 在那里我以为我是对的,说你不能这样做.:) 我不知道这个.+1 (2认同)

Dam*_*ash 5

类的final属性必须在创建对象之前指定一个值.所以你可以为它们赋值的最后一点是构造函数.

这通常用于不可变对象.

 public class Foo {

  private final Bar bar;

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

  public Bar getBar() {
   return new Bar(bar);
 } 
}
Run Code Online (Sandbox Code Playgroud)

维基说了些什么

防御性复制.