未在默认构造函数中初始化的变量
Variable not initialized in default constructor
我有这个class:
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
应该默认为所有 final 字段创建一个构造函数。但是,当我 运行 我的应用程序出现此错误时:
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
未正确设置 - 您可以通过检查 target/classes
目录中的 Image.class
来验证它相同的包(就像你在 src 中拥有的一样,除了你已经通过配置文件 明确定义了位置)。如果未生成,请验证您的依赖项、Lombok 插件,您可能需要探索 Lombok configuration 以进行进一步设置。
我遇到了同样的问题,看来我在安装过程中没有将 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>
我有这个class:
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
应该默认为所有 final 字段创建一个构造函数。但是,当我 运行 我的应用程序出现此错误时:
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
未正确设置 - 您可以通过检查 target/classes
目录中的 Image.class
来验证它相同的包(就像你在 src 中拥有的一样,除了你已经通过配置文件 明确定义了位置)。如果未生成,请验证您的依赖项、Lombok 插件,您可能需要探索 Lombok configuration 以进行进一步设置。
我遇到了同样的问题,看来我在安装过程中没有将 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>