lombok原理_Lombok,安装,原理及教程,nice!

35a9dea0a88453413dd6d2521a0ddf3a.png
面对工作中大量重复的,毫无技术含量get()、set()方法,你是不是抱怨过? 那你听说过Lombok吗? 那你知道Lombok还有哪些鲜为人知的秘密吗?

Lombok 简介

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

翻译

Lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而使您的Java更加生动有趣。永远不要再写另一个getter或equals方法,通过注解您的类有一个功能全面的生成器,自动化您的日志记录变量等等。

示例

用@Data代替所有成员的getter,setter方法,用@ToString代替toString方法。

@ToString
@Data
public class Account implements Serializable {
   private Integer id;
   private Integer uid;
   private Double money;
   private User user;
}

Lombok 原理

JSR 269:插件化注解处理API(Pluggable Annotation Processing API)

官网地址,感兴趣的小伙伴可以去看看

原理图流程如下:

001e3b040ce84cc4ab0c720354d41fbd.png

Lombok 安装

  • javac
    • 拷贝jar到类路径
    • javac -cp lombok.jar ...
  • Maven
    • pom 引入依赖
 <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
 </dependency>
  • Intellij IDEA
    • 安装Lombok 插件

c70910043bd9c9e0fe40145772155545.png

安装完成后,可以在Structure可以在View -> Tool Windows -> Structure 或者Alt +7中看到下图即安装成功:

e3f9399b6130689b450be2d7d82f1c46.png

Lombok常用注解

566c4e3c38ed84154c818cd52f95f59a.png

@Getter和@Setter

可以放在成员上或者类上来生成getter 和setter 方法只对成员变量起作用,对于类变量不起作用,final类型常量只有getter方法

@Getter(AccessLevel.PROTECTED)这个就是将getter方法的类型修饰符变为protected

@Getter(AccessLevel.NONE)这个就是某些成员不想添加getter方法可以不添加.

@ToString
@Getter
public class Account implements Serializable {
 private static final long serialVersionUID = 7063222791609347900L;
 private Integer id;
 private Integer uid;
 private Double money;
 @Getter(AccessLevel.NONE)
 private User user;
}

toString

功能:打印对象字符串

  • @ToString(exclude = ("money")) 打印的时候将money字段排除在外
  • @ToString(of =("成员变量或者静态变量") ) 打印时只输出 of 里边的变量。

@EqualsAndHashCode

8d5af6c3dd169fb6c73e17b59461a8e7.png

@EqualsAndHashCode (exclude = ("money"))在生成的equals,canEqual,hashCode方法中不会出现money变量的比较。

@NonNull

帮助我们省掉一些判断是否为空的代码

public void test(@NonNull String s){
  System.out.println(s);
 }
  @Test
 public void test1(){
  new Account().test(null);
}
结果:
java.lang.NullPointerException: s is marked non-null but is null 

@NoArgConstructor和@RequiredArgsConstructor和@AllArgConstructor

@NoArgConstructor 无参构造器 @RequiredArgsConstructor(未赋值的final常量,加入@NonNull的成员变量) @AllArgConstructor全参构造区

@Data

集成了

  1. @Getter/@Setter
  2. @ToString
  3. @EqualsAndHashCode
  4. @NonNull
  5. @RequiredArgsConstructor

@Builder

@Builder 类似于函数式编程,假如以后会生成

ee2f581fdb36832df0e24da797c7de83.png

在你需要赋值的时候,你可以

@Data
@Builder
public class Account implements Serializable {
 private Integer id;
 private Integer uid;
 private Double money;
  @Test
 public void test1(){
  Account account = Account.builder().id(1).uid(2).money(2.0).build();
  System.out.println(account);
 }
}

@Log

输出日志

d392c3af5dfd126573fbfd6910fa2192.png

val

 val map = new HashMap<String,Integer>();

我们可以在定义的时候一律用val代替

@Cleanup

比如最常见的InputStream流每次打开后都要关闭,我们可以在

@Cleanup Inputstream in = new FileInputStream("filepath");

这样我们可以省去关闭流的麻烦

OVER!如果这篇文章对你有帮助的话,不胜感激!!!

b8c1d8db1d2bdf19eaec613630f018f2.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值