Java 当我们在实体中使用final字段时?

Java 当我们在实体中使用final字段时?,java,lombok,Java,Lombok,有一段时间,我看到一些人在最后一场比赛中创造了龙目山: @AllArgsConstructor(access = AccessLevel.PRIVATE) public class Person { private final String firstName; private final String middleName; private final String lastName; 某些时间域不标记为final。当我们在@E

有一段时间,我看到一些人在最后一场比赛中创造了龙目山:

@AllArgsConstructor(access = AccessLevel.PRIVATE) 
    public class Person {

        private final String firstName;

        private final String middleName;

        private final String lastName;
某些时间域不标记为final。当我们在@Entity中标记final字段时,以及当我们不标记final字段时

如果不希望在构建对象后更改字段,则将字段设置为final


它还可以在多线程环境中帮助确保安全的对象初始化和共享。

在Lombok和
@allargsconstuctor
注释中,您可以使用
final
关键字确保对象在构造函数中初始化后不会更改。此注释将获取用于构建构造函数的所有字段

还有
@RequiredArgsConstructor
注释,它使用标有
final
的字段来构建构造函数:

@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class Person {
    private final String firstName;
    private final String middleName;
    private String lastName;
}
在delombok之后,您的构造函数将如下所示:

@java.beans.ConstructorProperties({"firstName", "middleName"})
private Person(String firstName, String middleName) {
    this.firstName = firstName;
    this.middleName = middleName;
}