是否有可能在任何特定时刻制作变量final
?
我想决定它何时不可变,而不仅仅是第一次任务。
如果null
不算作任务,那将是完美的。因此,如果您使用null初始化它,则在某些代码之后仍然会有第一个赋值的通配符,而不一定在构造函数中。
答案 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中提出了该功能。称为动态常数。检查以后的工作部分:
因此,该值是动态的,但是由于仅设置了它的值 曾经,它也是常数。