我有这门课:
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
// tag::code[]
@Data
@Document
public class Image {
@Id final private String id;
final private String name;
}
// end::code[]
我的理解是,@Data
应该默认为所有最终字段创建一个构造函数。但是,当我运行我的应用程序时,我收到此错误:
error: variable id not initialized in the default constructor
@Id final private String id;
为什么会发生这种情况?
最佳答案
My understanding is that @Data should create a constructor for all final fields by default. Error: variable id not initialized in the default constructor
@Id final private String id;
Why would this be happening?
是的!你是对的! @Data 注解为 Final 字段生成参数化构造函数,为所有非 Final 字段生成 setter,并为两种类型的字段生成 getter。
在您的情况下,生成的构造函数应如下所示,
public Image(Long id, String name) {
this.id = id;
this.name = name;
}
//getters for both fields
由于您的构造函数无法初始化最终字段 - 似乎 Lombok
未正确设置 - 您可以通过检查您的 Image.class
来验证它在 target/classes
具有相同包的目录(就像您在 src 中一样除非您通过配置文件显式定义了位置)。如果没有生成,请验证您的依赖项,Lombok 插件,您可能想探索 Lombok configuration以便进一步设置。
关于java - 变量未在默认构造函数中初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59598779/