【问题标题】:Adding @NoArgsConstructor anotationg causes error添加 @NoArgsConstructor 注释会导致错误
【发布时间】:2021-09-28 01:49:00
【问题描述】:

我有一个需要默认构造函数的 Student 类,我想用 @NoArgsConstructor 注释添加它,问题是当我添加它时,我的所有变量都会给出错误“变量‘xxx’可能没有被初始化”

这是课

import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

import java.util.UUID;
@Getter
@NoArgsConstructor

@Entity
public class Student {


    private final UUID studentId;
    private final String firstName;
    private final String lastName;
    private final String email;
    private final Gender gender;




    public Student(
              @JsonProperty("studentId") UUID studentId
            , @JsonProperty("firstName")String firstName
            , @JsonProperty("lastName")String lastName
            , @JsonProperty("email")String email
            ,@JsonProperty("gender") Gender gender) {
        this.studentId = studentId;
        this.firstName = firstName;
        this.lastName = lastName;

        this.email = email;
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Student{" +
                "studentId=" + studentId +
                ", firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", gender=" + gender +
                '}';
    }

    enum Gender{
        MALE,FEMALE,male,female
    }
}

【问题讨论】:

  • 您是否看到使用无参数构造函数时对象中的字段确实不会被初始化?看看他们的声明。你明白为什么它们必须由构造函数初始化吗?

标签: java spring lombok


【解决方案1】:

您的类中的所有字段都是final,并且预计在创建对象实例时初始化并且不会更改。当您使用@NoArgsConstructor 时,您正在创建一个构造函数,该构造函数可用于创建对象无需初始化值。如果你想创建一个没有值的对象,你可以删除 final 关键字,如下所示:

    private UUID studentId;
    private String firstName;
    private String lastName;
    private String email;
    private Gender gender;

如果您希望在对象创建期间分配值,请删除 @NoArgsConstructor

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2015-09-24
    • 1970-01-01
    • 2012-01-01
    • 2015-09-21
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多