我有这堂课:
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;
为什么会这样?
@Data
默认为所有最终字段创建一个构造函数。但是您必须对最终字段进行构造函数初始化。
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=10;
final private String name;
}
查看此链接:Instance variable as final in Java
您也可以使用@RequiredArgsConstructor
。它生成带有必需参数的构造函数。必需的参数是最终字段和具有约束的字段,例如@NonNull。
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
// tag::code[]
@Data
@RequiredArgsConstructor
@Document
public class Image {
@Id final private String id;
final private String name;
}
请参阅documentation以获取@RequiredArgsConstructor