Intellij IEDA 使用lombok,代码简约而不简单
来源:互联网 发布:朴廷桓柯洁网络十番棋 编辑:程序博客网 时间:2024/05/16 16:00
- lombok介绍
- 特性介绍
- lombok实现原理
- lombok使用
- IDEA lombok插件安装
- Demo介绍
lombok介绍
lombok提供通过注解来创建代码,以达到避免编写样板代码,简约代码的目的,特别对于POJO类,效果显著,而且可以规避一些代码检查工具的检查(在公司内很有用)。
特性介绍
val关键字:
修饰final的局部变量,duck type风格public String example() { val example = new ArrayList(); example.add("Hello, World!"); val foo = example.get(0); return foo.toLowerCase();}
注解:
参考 lombok全特性- @NonNull:修饰方法参数/成员变量,如果入参为空,则抛出NPE
- @Cleanup:修饰函数中Closable类的实例,自动添加try-finally,执行close
- @Getter/@Setter:修饰类/成员变量,提供get/set方法
- @ToString:修饰类,重写toString()
- @EqualsAndHashCode:根据类的成员变量生成equal和hashCode()
- @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:创建构造函数
- @Data:@ToString, @EqualsAndHashCode, @Getter @Setter @RequiredArgsConstructor 组合
- @Value:修饰类,让类的实例不可通过引用修改内部成员,具备Immutable特性
- @Builder:修饰类,会生成static的内部类Builder,使用Builder模式
- @SneakyThrows:修饰方法,生成try-catch,并抛出非运行异常
- @Synchronized:修饰方法,同步代码
- @Getter(lazy=true):修饰变量,对变量生成双重检测的get代码
- @Log:修饰类,给类生成一个log的成员变量
lombok实现原理
lombok利用了JDK6的新特性:JSR-000269 Pluggable Annotation Processing API(插入式注解API)。
Javac在编译过程变成:
1. 先对源码分析,生成一棵抽象语法树,
2. 再不断调用实现了JAR 269 API的程序,根据注解修改了抽象语法树,直到语法树不再被修改为止
3. javac根据修改后的抽象语法树生成.class字节码
lombok使用
IDEA lombok插件安装
Demo介绍
通过IDEA创建一个maven-archetype-quickstart的Maven工程。
添加lombok依赖,由于使用Log注解,加上Slf4j依赖:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version> 1.16.18</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency>
App代码如下:
import lombok.Builder;import lombok.Data;import lombok.NonNull;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class App { public static void main( String[] args ){ Person person; try { person = Person.builder().age(10).build(); }catch (NullPointerException e){ log.error(e.getMessage()); } person = Person.builder().age(10).name("foo").build(); log.info(person.toString()); } @Data @Builder public static class Person{ @NonNull private String name; private int age; }}
输出如下:
[main] ERROR edu.fate.App - name[main] INFO edu.fate.App - App.Person(name=foo, age=10)
Demo中使用的都是常用的注解,其他注解不常用,并且使用时要谨慎并要理解原理。
Demo工程传送门
阅读全文
0 0
- Intellij IEDA 使用lombok,代码简约而不简单
- ITIL:简约而不简单
- 简约而不简单
- 简约而不简单:Dropbox
- 简约而不简单
- 简约而不简单的SnackBar
- 简约而不简单的金山WPS
- 简约而不简单——Android SimpleAdapter
- SqlHelper帮助类------简约而不简单
- 软件思想之--win8简约而不简单
- 简约而不简单的拟物化设计
- 简约而不简单——Android SimpleAdapter
- 【Android】简约而不简单Android SimpleAdapter
- 简约而不简单的单例模式
- 简约而不简单——Android SimpleAdapter
- 简约而不简单——Android SimpleAdapter
- 简约而不简单——Android SimpleAdapter
- 简约而不简单的Django教程
- JAVA深拷贝和浅拷贝
- socket API 学习一
- Linux命令(11)——字符转换命令:tr、col、join、paste、expand
- iOS 算法面试题(字符串逆序输出、二叉树、归并排序)~demo
- [ndk]Android NDK: Your APP_BUILD_SCRIPT points to an unknown file/Please define the NDK_PROJECT_PATH
- Intellij IEDA 使用lombok,代码简约而不简单
- sdl renderer window texture surface更新关系
- 分区丢失了数据怎么恢复
- ss!=null&&!ss.isEmpty()的区别
- 排序算法--归并排序
- VBA-常用函数集锦-13-Excel多行或多列删除
- Java基础总结-GUI
- Stars HDU
- android的线程池,你了解这些就够了