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

问题描述 投票:0回答:1

我有这堂课:

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;

为什么会这样?

java spring-boot constructor lombok default-constructor
1个回答
-1
投票

@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

© www.soinside.com 2019 - 2024. All rights reserved.