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

Whi*_*cal 7 java variables final immutability

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

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

npi*_*nti 7

一旦你分配一个final变量,你不能改变它的值,如规定在这里:

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

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

...
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;
    }
}

...
Run Code Online (Sandbox Code Playgroud)


Eng*_*uad 5

你不能.你可以做的是用一个方法封装它:

public boolean setValue(int i)
{
    if(isMutable)
    {
        value = i;
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)


Whi*_*cal 2

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

  • 在 Java 语言中展示常量的延迟初始化

因此,该值是动态的,但由于其值仅设置一次,因此它也是恒定的。