1.为什么强大

​项目中经常使用bean,entity等类,绝大部分数据类类中都需要get、set、toString、equals和hashCode方法,尽管IDE工具都会帮我们生成。但自动生成这些代码后,如果bean中的属性一旦有修改、删除或增加时,需要重新生成或删除get/set等方法,给代码维护增加负担。而使用了lombok之后,就不需要编写或生成setter或getter等方法了,而使用lombok注解的方式,在编译生成的字节码文件中就会存在setter/getter等方法,这样就大大减少了代码量,方便了代码的维护。

2.安装lombok插件(如果不安装会报错,提示没有get set方法)

使用前需要安装lombok插件

3.maven依赖

在使用lombok插件的时候,还要进行添加lombok的Maven依赖,代码示例:

org.projectlombok

lombok

1.16.10

4.常用注解

@Setter @Getter : 为相应属性添加get set方法

import lombok.Getter;

import lombok.Setter;

import lombok.ToString;

import java.util.Date;

@Setter

@Getter

@ToString

public class User {

private Integer id;

private String name;

private Integer age;

private String sex;

private Date birthday;

}

@NonNull:该注解在属性或者构造器上,lombok会自动生成一个非空声明,用于校验参数,避免空指针

import lombok.NonNull;

public class NonNullExample extends Something {

private String name;

public NonNullExample(@NonNull Person person) {

super("Hello");

this.name = person.getName();

}

}

@Cleanup:该注解能帮助我们自动调用close()方法,很大程度简化代码可读性

import lombok.Cleanup;

import java.io.*;

public class CleanupExample {

public static void main(String[] args) throws IOException {

@Cleanup InputStream in = new FileInputStream(args[0]);

@Cleanup OutputStream out = new FileOutputStream(args[1]);

byte[] b = new byte[10000];

while (true) {

int r = in.read(b);

if (r == -1) break;

out.write(b, 0, r);

}

}

}

@EqualsAndHashCode:默认情况下,会使用所有非静态(non-static)和非瞬态(non-transient)属性来生成equals和hasCode,也能通过exclude注解来排除一些属性。

import lombok.EqualsAndHashCode;

@EqualsAndHashCode(exclude={"id", "shape"})

public class EqualsAndHashCodeExample {

private transient int transientVar = 10;

private String name;

private double score;

private Shape shape = new Square(5, 10);

private String[] tags;

private int id;

public String getName() {

return this.name;

}

@EqualsAndHashCode(callSuper=true)

public static class Square extends Shape {

private final int width, height;

public Square(int width, int height) {

this.width = width;

this.height = height;

}

}

}

@ToString:类使用@ToString注解,Lombok会生成一个toString()方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。

代替效果为:

@Override public String toString() {

return "Square(

super=" + super.toString() + ",

width=" + this.width + ",

height=" + this.height +

")";

}

}

@Data:注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。这个注解可是说是非常强大。

5.lombok工作原理

Lombok本质上就是一个实现了“JSR 269 API”的程序。在使用javac的过程中,它产生作用的具体流程如下:

javac对源代码进行分析,生成了一棵抽象语法树(AST)

运行过程中调用实现了“JSR 269 API”的Lombok程序

此时Lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点

javac使用修改后的抽象语法树(AST)生成字节码文件,即给class增加新的节点(代码块)

6.总结

Lombok的使用通过注解的方式减少了getter,setter的手动增加减少了代码量,增加开发效率,特别是在改动属性名字时候维护起来也特别容易。但是同时它也减少了代码的可阅读性降低了源码的舒适度。

import lombok 报错_Lombok注解@Getter @Setter详解相关推荐

  1. import lombok 报错_lombok

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

  2. import lombok 报错_Lombok快速入门

    Lombok介绍: Lombok其实就是取名自龙目岛(Pulau Lombok),龙目岛是印度尼西亚西努沙登加拉(Nusa Tenggara Barat)省岛屿,西隔龙目海峡面对巴厘岛,东隔阿拉斯(A ...

  3. java lombok.getter_Lombok注解@Getter @Setter详解

    1.为什么强大 ​项目中经常使用bean,entity等类,绝大部分数据类类中都需要get.set.toString.equals和hashCode方法,尽管IDE工具都会帮我们生成.但自动生成这些代 ...

  4. import lombok 报错_Android上使用Lombok和set、get方法告别

    一.前言 在项目中使用Lombok可以减少很多重复代码的书写.比如说getter/setter/toString等方法的编写.比如看下图我写的代码,一个@Data注解搞定,彻底抛弃set get方法. ...

  5. import lombok 报错_使用lombok

    Lombok是一种JavaArchive(JAR)文件,可用来消除Java代码的冗长.通过在开发环境中实现Lombok,开发人 员可以节省构建诸如hashCode()和equals()这样的方法以及以 ...

  6. php报错stack trace,PHP错误详解

    PHP异常详解 PHP的异常是什么? PHP 5 提供了一种新的面向对象的错误处理方法.异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. 一般使用方法:getMessa ...

  7. 关于后台报错:no getter for property named ‘ew‘ in ‘class com.baomidou.mybatisplus.core.conditions.query.xx

    已解决 关于后台报错:no getter for property named 'ew' in 'class com.baomidou.mybatisplus.core.conditions.quer ...

  8. windows10下,from skimage import morphology 报错的解决办法

    windows10下,from skimage import morphology 报错的解决办法 报错原因 没有安装numpy+mkl库 解决方法 卸载skimage pip uninstall s ...

  9. Windows anaconda python3 import ssl报错的解决方案

    Windows anaconda python3 import ssl报错的解决方案_dailinqing1984的博客-CSDN博客

最新文章

  1. 电机高频注入原理_永磁同步电机新型转子位置估计误差补偿策略
  2. 2018 - 待深入学习博客
  3. $.ajax使用总结(一):Form提交与Payload提交
  4. alloca函数的风险_alloca的函数范围中的goto是否有效?
  5. 这不应该是19岁女孩的结局,这不应该是围观者该有的表达!
  6. 资料员计算机知识大全,最新资料员专业基础知识
  7. OC 获取view相对位置_【全职业P4阶段世界BUFFS和药剂】BUFFS获取方法药剂自己查询出处...
  8. python qt5 数据改变 触发信号_pyqt5自定义信号实例解析
  9. 【1】ArcGIS API for JavaScript 4.5/4.6 本地部署
  10. 拓端tecdat|使用Python中Keras的LSTM递归神经网络进行时间序列预测
  11. 机器学习、数据科学、深度学习、可视化常用方法速查手册总结分享
  12. 界面控件DotNetBar for WinForms使用教程:highlight组件使用教程
  13. [论]【MGT】Meta Graph Transformer: A Novel Framework for Spatial–Temporal Traffic Prediction
  14. 怎么完全卸载赛门铁克_赛门铁克(sep)卸载方法
  15. Maven使用详解,非常详细
  16. 虚拟机ip映射到外网
  17. ubuntu移动硬盘打不开
  18. Flutter时间轴
  19. 联想笔记本小新air14,键盘如何设置不用按Fn直接按F1~12、?
  20. EE4408: Machine Learning:

热门文章

  1. c语言的一段程序,C语言第一个程序(入门)
  2. 链表 python 牛客_牛客网《剑指offer》之Python2.7实现:合并两个排序的链表
  3. Android平台RTSP轻量级服务|RTMP推送摄像头或屏幕之音频接口设计
  4. Windows平台RTSP播放器/RTMP播放器设计需要考虑的几个点
  5. matlab程序求尖锐度,业务名称
  6. MySQL常见面试题与答案
  7. 学习Spring Boot:(二十一)使用 EhCache 实现数据缓存
  8. socket和http区别有哪些
  9. 怎么看调用的接口_Hadoop RPC调用实例分析
  10. mysql怎么加固_mysql安装及加固