"Once-initialized"施工时未初始化的变量



是否有任何方法在Java中创建像final这样的变量,这些变量在构造函数中没有初始化,但是一旦初始化,它们就永远不会再改变了?我的问题是,我在不同的时间点获得变量值,我想在收到第一个值之前或尽快创建类。

我已经考虑过为每个变量保留一个标志的明显解决方案,但我想知道是否有比这更有效的方法

我可能会按照上一个答案的思路做一些事情。始终使用setter设置字段,如果字段不是默认值(即null),则不允许设置。

在初始化最后一个变量时,请确保只在下列结构中进行初始化,否则编译器会抛出错误:

  1. 初始化表达式

    公共类FinalVariable {//在实例初始化表达式中,或while声明本身//final =;

    int finalInstanceField = 5;

    }

  2. 实例初始化块

    公共类FinalVariable {

    {
        // Initialization in instance initializer block
        finalInstanceField = 5;
    }
    
  3. 构造块公共类FinalVariable {

    final int finalInstanceField ;
    public FinalVariable() {
        // constructor
        finalInstanceField = 7;
    }
    

    }

静态final变量可以通过两种方式初始化。1.初始化表达式
public class FinalVariable {
    // in the instance initializer expression, or while declaration itself
    // final <type> <variable_name> = <initializer expression>;
    static final int finalStaticField = 25;
}
  1. 静态初始化块

    公共类FinalVariable {

    static final int finalStaticField;
    static {
        finalStaticField = 7;
    }
    

    }

最新更新