java - 变量未在默认构造函数中初始化

标签 java spring-boot constructor lombok default-constructor

我有这门课:

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/

相关文章:

java - HSQLDB:如果不存在则创建模式 -> 意外标记不存在

postgresql - Spring Boot+Kotlin+Postgres 和 JSON : "org.hibernate.MappingException: No Dialect mapping for JDBC type"

java - 作为 jar 运行时找不到类路径资源

spring-boot - 如何使用 Spring Data DynamoDB 在应用程序启动时自动创建 DynamoDB 表?

c++ - 虚拟继承

java - 为什么我们不能在java构造函数中传递字符串

java - 从 java 流创建 java.util.Enumeration 的最佳方法是什么?

java - 不使用线程的异步数据库写入

java - Ivy 无法解析依赖项 : What to check, 怎么办?

c# - 编程语言中的构造函数