Lombok
Lombok 用于减少模块化代码,它可以自动生成 getters/setters
等。你只需要在函数前加上 @Data
注解。
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
@Data
public class Todo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String summary;
private String description;
}
添加上 @Data
注解之后,以下方法会被自动添加:
- ToString
- EqualsAndHashCode
- Getter
- Setter
- RequiredArgConstructor
在Maven中使用
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
详解
@Data
是一个便捷的注解,它将@ToString
, @EqualsAndHashCode
, @Getter
@Setter
和 @RequiredArgsConstructor
注解的功能结合在一起。
@Data
类似于隐性地将上述的注解标注在类上(除了已存在有手动书写的构造器的情况下,不会再自动生成一个构造器),但是这些注解的属性( callSuper
, includeFieldName
, exclude
)不能在 @Data
中设置。如果你想设置这些属性,就在@Data上添加相应的注解。
所有生成的 getter 和 setter 都是 public
的。如果你想要覆盖它们的可见性,就显性添加 @Setter
和/或 @Getter
注解。你也可以用 AccessLevel.NONE
的注解来完全阻止生成 getter 和 setter
所有标注为 transient
的字段都不会自动生成和 hashCode
和 equals
有关的方法。所有static字段都不会被自动生成任何方法。
如果被注解类中已经存在一个相同名字、相同参数数量的方法,则哪个方法不会被再次生成,也不会有警告和错误。例如,如果你已经有一个 quals(AnyType param)
则 equals
方法不会被自动生成。尽管参数的类型有可能不同。
@Data
可以处理字段的泛型参数。在泛型类构造对象时,可以用 staticConstructor
参数来生成一个私有的构造函数,以及返回新实力的静态方法。例如, @Data(staticConstructor="of") class Foo<T> {private T x;}
,你可以这样创建Foo的实例:Foo.of(5)
,而不用写:new Foo<Integer>(5);