final 字段没有初始化,那么通常 Java 编译器不允许你有一个无参数的构造函数?
在Java中,如果一个类的字段被声明为
final
,那么它必须在声明时或者在构造方法中初始化。这是因为final
字段的值在初始化之后不能被修改,所以如果没有在声明时或构造方法中赋值,编译器就无法保证这个final
字段会被正确地初始化。
因此,如果一个类有一个或多个
final
字段,并且这些字段没有在声明时或构造方法中初始化,那么Java编译器将不允许这个类拥有无参数的构造函数,因为它无法确保final
字段的初始化。
但是,请注意,如果你使用了Lombok的
@NoArgsConstructor(force = true)
注解,并且类中有未初始化的final
字段,Lombok可能会尝试生成一个无参数的构造函数,但是final
字段没有被初始化,这可能会导致运行时错误,通常不建议这样做。