run*_*aul 7 java constructor default-constructor lombok spring-boot
我有这门课:
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[]
Run Code Online (Sandbox Code Playgroud)
我的理解是@Data默认情况下应该为所有最终字段创建一个构造函数。但是,当我运行我的应用程序时,出现此错误:
error: variable id not initialized in the default constructor
@Id final private String id;
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?
我遇到了同样的问题,看来我annotationProcessorPath在安装过程中没有将其添加到 lombok,类似于 @runnerpaul 提到的。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我的理解是 @Data 默认情况下应该为所有最终字段创建一个构造函数。错误:变量 id 未在默认构造函数中初始化
@Id final private String id;为什么会发生这种情况?
是的!你是对的!@Data 注释为 final 字段生成参数化构造函数,为所有非 final 字段生成 setter 和为这两种类型的字段生成 getter。
在您的情况下,您生成的构造函数应如下所示,
public Image(Long id, String name) {
this.id = id;
this.name = name;
}
//getters for both fields
Run Code Online (Sandbox Code Playgroud)
由于您的构造函数无法初始化最终字段 - 似乎Lombok没有正确设置 - 您可以通过检查您Image.class在target/classes具有相同包的目录中来验证它(就像您在 src 中拥有它一样,除非您已经通过配置明确定义了位置文件)。如果未生成,请验证您的依赖项 Lombok 插件,您可能需要探索 Lombok配置以进行进一步设置。
| 归档时间: |
|
| 查看次数: |
10223 次 |
| 最近记录: |