常用Lombok注解详解

整理一下项目中常用的lombok注解:

@Getter

加在类上,可以自动生成参数的getter方法

@Setter

加在类上,可以自动生成参数的setter方法

@ToString

加在类上,调用toString()方法,可以输出实体类中所有属性的值

@RequiredArgsConstructor

会生成一个包含常量,和标识了NotNull的变量的构造方法。生成的构造方法是私有的private。这个我用的很少

@EqualsAndHashCode

  1. 它会生成equals和hashCode方法
  2. 默认使用非静态的属性
  3. 可以通过exclude参数排除不需要生成的属性
  4. 可以通过of参数来指定需要生成的属性
  5. 它默认不调用父类的方法,只使用本类定义的属性进行操作,可以使用callSuper=true来解决,会在@Data中进行讲解

@Data

这个是非常常用的注解,这个注解其实是五个注解的合体:
在这里插入图片描述
解决@EqualsAndHashCode有两种方法:
方法一:使用@Getter、@Setter、@ToString以及自定义equals和hashcode方法来替换@Data
方法二:在使用@Data的时候同时使用@EqualsAndHashCode(callSuper=true)
测试一下:

import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
@EqualsAndHashCode(callSuper = true)
public class Test01 extends Test02{
    private String id ;
}
import lombok.Data;

@Data
public class Test02 {
    private String uuid;
}

public class TestMain {

    public static void main(String[] args) {
        Test01 test01 = new Test01();
        Test01 test02= new Test01();

        test01.setId("1");
        test01.setUuid("1");
        test02.setId("1");
        test02.setUuid("2");

        System.out.println(test01.hashCode() == test02.hashCode());//重写了hashcode所以值是相等的,这里有点小尴尬
        System.out.println(test01.equals(test02));//这个比较的是内容,在这里就更尴尬了
        //比较的是对象的地址,这个是没有问题的
        System.out.println(test01 == test02);
    }
}

没用加@EqualsAndHashCode(callSuper = true):
在这里插入图片描述
加了之后:
在这里插入图片描述
是不是很是神奇,原因:
@EqualsAndHashCode默认不继承父类,也就是重写equals和hashcode的时候不包含父类的字段,这就很坑,比较的是自己的字段

@Slf4j

这个就是打日志的,直接使用log.info()
其他输出日志的方式:
整理

@NoArgsConstructor

生成一个无参数的构造方法

@AllArgsConstructor

生成一个包含所有变量的构造方法

@Value

这个注解要和Spring的@Value注解区分,Spring的是从配置文件读取内容,这个注解是在类中的所有字段默认全部声明为private final类型,只会生成Getter方法,不会生成Setter方法,这个东东我没使用过(●’◡’●)

@Cleanup

这个注解就比较好玩了,主要用于关闭资源使用,这里简单写一下
没使用之前:

 public static void main(String[] args) throws IOException {
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream("D:...");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            inputStream.close();
        }
    }

使用之后:

 public static void main(String[] args) throws IOException {
       @Cleanup InputStream inputStream  = new FileInputStream("D:...");
    }

是不是方便了很多,(●ˇ∀ˇ●)
其他的注解很少使用就不列举了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值