在Java中是否有任何方法可以创建像构造函数中未初始化的final这样的变量,但是一旦初始化它们就永远不能再次更改?我的问题是我在不同的时间点获得变量值,并且我想在收到第一个值之前或之后立即创建该类。
我已经考虑过为每个变量保留一个标志的明显解决方案,但我想知道是否还有更高效的方法。
答案 0 :(得分:0)
我可能会按照最后一句话here做一些事情。始终使用setter设置字段,如果该字段不是默认值(即null),则不允许设置它。
答案 1 :(得分:0)
初始化此最终变量时,请确保仅在以下某个构造中初始化,否则编译器会抛出错误。
初始化表达式
public class FinalVariable { //在实例初始化表达式中,或在声明本身时 // final =; final int finalInstanceField = 5;
}
实例初始化程序块
public class FinalVariable { final int finalInstanceField;
{
// Initialization in instance initializer block
finalInstanceField = 5;
}
构造函数块 公共类FinalVariable {
final int finalInstanceField ;
public FinalVariable() {
// constructor
finalInstanceField = 7;
}
}
静态最终变量可以通过两种方式初始化。 1.Initializer表达式
public class FinalVariable {
// in the instance initializer expression, or while declaration itself
// final <type> <variable_name> = <initializer expression>;
static final int finalStaticField = 25;
}
静态初始化程序块
公共类FinalVariable {
static final int finalStaticField;
static {
finalStaticField = 7;
}
}