在任何给定时刻(在初始化和最终代码之后)创建变量final

时间:2012-07-25 12:26:21

标签: java variables immutability final

是否有可能在任何特定时刻制作变量final? 我想决定它何时不可变,而不仅仅是第一次任务。

如果null不算作任务,那将是完美的。因此,如果您使用null初始化它,则在某些代码之后仍然会有第一个赋值的通配符,而不一定在构造函数中。

4 个答案:

答案 0 :(得分:7)

分配final变量后,您永远不能更改其值here

  

最终变量只能通过一次初始化一次   初始化程序或赋值语句。它不需要   在声明点初始化:这被称为“空白   最终的“变量。

如果你想拥有一个在给定时间点可以变为不可变的变量,你可以做的就是这样:

...
private boolean isMutable;
private String someString;

public void setMutable(boolean value)
{
    this.isMutable = value;
}

public void setSomeString(String value)
{
    if (this.isMutable)
    {
        this.someString = value;
    }
}

...

答案 1 :(得分:5)

不,你不能。你可以做的是将它封装在一个方法中:

public boolean setValue(int i)
{
    if(isMutable)
    {
        value = i;
        return true;
    }
    return false;
}

答案 2 :(得分:3)

应该在声明变量时执行,因此无法生成已声明的变量final

答案 3 :(得分:0)

供您了解,现在在草案http://openjdk.java.net/jeps/309中提出了该功能。称为动态常数。检查以后的工作部分:

  • 使用Java语言显示常量的惰性初始化
  

因此,该值是动态的,但是由于仅设置了它的值   曾经,它也是常数。