是否有任何方法在Java中创建像final这样的变量,这些变量在构造函数中没有初始化,但是一旦初始化,它们就永远不会再改变了?我的问题是,我在不同的时间点获得变量值,我想在收到第一个值之前或尽快创建类。
我已经考虑过为每个变量保留一个标志的明显解决方案,但我想知道是否有比这更有效的方法
我可能会按照上一个答案的思路做一些事情。始终使用setter设置字段,如果字段不是默认值(即null),则不允许设置。
在初始化最后一个变量时,请确保只在下列结构中进行初始化,否则编译器会抛出错误:
-
初始化表达式
公共类FinalVariable {//在实例初始化表达式中,或while声明本身//final =;
int finalInstanceField = 5;}
-
实例初始化块
公共类FinalVariable {
{ // Initialization in instance initializer block finalInstanceField = 5; }
-
构造块公共类FinalVariable {
final int finalInstanceField ; public FinalVariable() { // constructor finalInstanceField = 7; }
}
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; }
}