final
是否可以在任何给定时刻制作变量?我想决定它什么时候是不可变的,而不仅仅是第一次分配。
这将是完美的,如果null
不能算作一项任务。因此,如果您将其初始化为 null,则在某些代码之后的第一个赋值仍然会有一个通配符,而不必在构造函数中。
final
是否可以在任何给定时刻制作变量?我想决定它什么时候是不可变的,而不仅仅是第一次分配。
这将是完美的,如果null
不能算作一项任务。因此,如果您将其初始化为 null,则在某些代码之后的第一个赋值仍然会有一个通配符,而不必在构造函数中。
分配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;
}
}
...
你不能。你可以做的是用一个方法封装它:
public boolean setValue(int i)
{
if(isMutable)
{
value = i;
return true;
}
return false;
}
应该在声明变量时完成,因此不可能创建已经声明的变量final
。
只是为了让您知道,该功能现在在草案中提出:http: //openjdk.java.net/jeps/309。它被称为动态常数。检查未来的工作部分:
因此,该值是动态的,但由于其值仅设置一次,因此它也是恒定的。