8

final是否可以在任何给定时刻制作变量?我想决定它什么时候是不可变的,而不仅仅是第一次分配。

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

4

4 回答 4

8

分配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;
    }
}

...
于 2012-07-25T12:33:16.517 回答
6

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

public boolean setValue(int i)
{
    if(isMutable)
    {
        value = i;
        return true;
    }
    return false;
}
于 2012-07-25T12:31:44.663 回答
3

应该在声明变量时完成,因此不可能创建已经声明的变量final

于 2012-07-25T12:31:22.737 回答
2

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

  • 在 Java 语言中呈现常量的惰性初始化

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

于 2018-10-12T10:14:32.210 回答