当前位置: 代码迷 >> 综合 >> Lombok安装,原理及教程,nice!!!
  详细解决方案

Lombok安装,原理及教程,nice!!!

热度:64   发布时间:2024-01-29 03:09:05.0

面对工作中大量重复的,毫无技术含量 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)

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

原理图流程如下:

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 插件

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

Lombok 常用注解

@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

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

@NonNull

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

public void test(@NonNull String s){System.out.println(s);}@Testpublic 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 类似于函数式编程,假如以后会生成

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

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

@Log

输出日志

val

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

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

@Cleanup

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

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

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

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

  相关解决方案