Lombok学习笔记(一)Lombok及其注解

初识Lombok

一、Lombok简介

Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。

使用Lombok前需要在idea上安装Lombok插件,如图:

然后需要在我们的项目中导入Lombok的jar文件:

lombok-1.18.0.jar

然后我们创建一个JavaBean:Car

package main.java.StuLomBok;

public class Car {
    private String id;
    private String brand;
    private String color;
    private double price;
}

这个JavaBean 只有几个字段,getter、setter等都没有。

接下来,我们就详细的介绍一下,如何使用Lombok的注解为该JavaBean在编译时自动添加getter、setter、构造器等一系列的方法的。

二、Lombok中的注解及使用

 1、@Getter 和 @Setter

我们可以使用这两个注解为JavaBean中的字段,自动生成默认的getter和setter方法:

public class Car {
    @Getter @Setter private String id;
    @Getter @Setter private String brand;
    @Getter @Setter private String color;
    @Getter @Setter private double price;
}

@Getter 和 @Setter 还可以用在类上面,生成所有字段的getter和setter:

@Getter
@Setter
public class Car {
    private String id;
    private String brand;
    private String color;
    private double price;
}

默认生的getter和setter方法是public的,我们可以使用AccessLevel修改方法的访问权限,如下:

@Getter(value = AccessLevel.PROTECTED)

2、@ToString

类注解,用于生成toString()方法,默认按顺序(以逗号隔开)打印类名和每个字段。

@ToString
public class Car {}

我们还可以设置toString()方法仅包含哪些字段:of

@ToString(of = {"id","brand"})//of,设置toString方法包括哪些字段
public class Car {}

设置toString()方法不包括哪些字段:exclude

@ToString(exclude = {"color"})//exclude,设置toString方法不包括哪些字段
public class Car {}

设置可以调用父类的构造方法:callSuper

@ToString(of = {"id","brand","color"},callSuper = true)
public class Car {}

3、@EqualsAndHashCode

生成equals() 和 hashcode()方法,默认使用所有非静态、非transient字段。同样,我们可以使用of、exclude、callSuper属性设置包含或不包含哪些字段以及是否调用父类的equals和hashcode()方法。

@EqualsAndHashCode(of = {"id","brand","color"},exclude = {"price"})
public class Car {}

@EqualsAndHashCode(callSuper = true)
class BWM extends Car{ }

4、@NoArgsConstrutor、@RequiredArgsConstructor、AllArgsConstructor

  • @NoArgsConstructor:

生成一个无参构造方法。当啊类中有final字段没有被初始化时,编译器会报错,此时可用force属性,为没有初始化的final字段设置默认值0/false/null。对于具有例如 @NonNull 约束的字段,不会生成检查或分配默认值。

@NoArgsConstructor(force = true)
public class Car {
    @NonNull private String id;
    @NonNull  private String brand;
    @NonNull  private String color;
    @NonNull  private double price;
    public final String owner;
}
  • @RequiredArgsConstructor

会生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段。可以使用 staticName = “of” 生成一个静态的of()方法,并把构造方法设为私有的。

@RequiredArgsConstructor(staticName = "of")
public class Car {
    @NonNull private String id;
    @NonNull  private String brand;
    @NonNull  private String color;
    @NonNull  private double price;
    public final String owner;
}
  • @AllArgsConstructor

生成一个全参的构造方法。

5、@Data

@Data 组合了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能

6、@Accessors

控制生成的getter和setter,主要参数介绍:

  • fluent:boolean值,默认为false。控制生成的getter和setter方法前面是否带get/set;
  • chain:boolean值,默认false。如果设置为true,setter返回的是此对象,方便链式调用方法;
  • prefix:设置前缀 例如:@Accessors(prefix = "abc") private String abcAge 当生成get/set方法时,会把此前缀(abc)去掉。
@Accessors(prefix = {"abc_"})//生成getter和setter时去掉字段前缀
public class Car {
    private String abc_id;
    private String abc_brand;
}

7、@Synchronized

方法级别的注解,给方法加同步锁。

@Synchronized
public void driver(){}

8、@Wither

提供了给final字段赋值的一种方法。

9、@onXXX

在注解里面添加注解的方式。

10、@Builder

生成复杂的构建器API。

11、@Delegate

为该类生成一系列来自于List接口的方法。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值