Lombok快速上手

239 阅读2分钟

Lombok官网

一、Lombok

Lombok是一个Java库,它通过简单的注释来自动生成一些样板代码,比如getter、setter、equals、hashCode、toString等方法。这样可以让代码更加简洁,减少重复的代码编写工作,提高开发效率。

在使用Lombok时,应当权衡其带来的便利和可能的风险,合理地应用它,保持代码的清晰和可维护性。

二、Lombok引入

普通maven项目Lombok依赖为:

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.22</version>
  <scope>provided</scope>
</dependency>

三、Lombok注解

1. @Setter和@Getter

提供getter和setter方法

ps: static修饰的变量不生成getter和setter方法

//注解写在类上时 表示给类的所有属性都生成set和get方法
@Setter
@Getter
public class User {

    //写在属性上时 表示只给当前属性 生成set和get方法
    @Setter
    @Getter
    String name;
    
    //表示生成的set方法是私有的
    @Setter(AccessLevel.PRIVATE)
    Integer age;
    
    /*
    属性值
    PUBLIC,
    MODULE,
    PROTECTED,
    PACKAGE,
    PRIVATE,
    NONE;
    * */
}

3. @ToString

生成toString方法,默认情况下它会按顺序打印类名称以及每个字段。

//exclude表示toString方法输出属性
@ToString(exclude = {"age","name"})
public class User {
    Integer id;
    String name;
    Integer age;
}

3.@EqualsAndHashCode

生成equals和hashCode、canEqual方法。用于比较两个类对象是否相同。

写在类上

  1. @NoArgsConstructor,@AllArgsConstructor

NoArgsConstructor: 生成无参构造方法

AllArgsConstructor: 生成有参构造方法

@NoArgsConstructor
@AllArgsConstructor
public class User {
    public Integer id;
    public String name;
    public Integer age;
}

5.@Data

会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。

@Data
public class User {
    public Integer id;
    public String name;
    public Integer age;
}

四、Lombok的一些坑

  • 使用@Data注解生成的equals方法,默认只判断了当前类的属性是否相等,而忽略了父类的属性,从而使两个明显不相等的对象通过equals尽判断为相等
  • lombok对于第一个字母小写第二个字母大写的属性,生成的setter/getter方法,与mybatis获取属性的方法容易造成冲突。如sName属性,生成getSName,setSName,但在mybatis中并不能正确的解析到对应的属性名称为sName