java 优雅编程 之lombok开发利器

kenx
• 阅读 2285

我们知道在最开始学习java的时候我们在编写pojo类时候需要手写getter,setter toString.....等,刚开始我们觉得还可以接受,乐于去编写的而且 java开发工具idea 也提供了这些快捷键可以一键生成属性对应的getter,setter,toString 等方法,不过即使这样我们每次还需要手动通过快捷键去生成,也是很繁琐不友好,而且当你一个实体类有大量属性时候就会产生大量getter,setter方法代码可读性就不是很好,这也就是java有时候为什么回显得臃肿的原因了,但是有什么好的解决办法呢,这是我们今天要说的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.

Project Lombok 是一个 Java 库,可自动插入您的编辑器并构建工具,为您的 Java 增添趣味。 永远不要再编写另一个 getter 或 equals 方法,通过一个注释,您的类就有一个功能齐全的构建器,自动化您的日志变量等等。

简而言之: Lombok可以通过注解形式来简化Java模版化代码也就是那些没有营养,却又不得不写的代码;像实体中定义的getter、setter、equals、hashcode、toString等方法).日志记录中引入日志记录器等,是提高Java开发人员,开发效率的语法糖!!!😄,用上这个后java开发也可以甜甜的,

Lombok大神 GitHub猛👇这里

如何使用Lombok

在项目中我们要添加Lombok依赖这里用maven为例

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope>
</dependency>

IDEA开发工具中使用需要在idea开发工具中安装lombok插件

  1. 打开idea偏好设置找到插件一栏搜索lombok插件

java 优雅编程 之lombok开发利器 没安装话点击安装我这里已经安装了,所以提示我需要更新

  1. 安装好后点解应用---重启idea 后才会生效 java 优雅编程 之lombok开发利器

  2. 开启Enable annotation processing

java 优雅编程 之lombok开发利器

这样到此就可以愉快的在项目中使用了

常用注解

实体类pojo

@Getter/@Setter

注解在属性上或者上可以同时使用,当注解在属性上时为实体类单个属性提供 getXxx 和 setXxx 方法当注解在类上时为整个类所有属性提供getXxx 和 setXxx 方法getXxx 和 setXxx 方法用于给属性获取值和设置值

@ToString

注解在类上实现toString()方法用于在打印对象时候会答应对象内容,而不是对象的地址如

java 优雅编程 之lombok开发利器

@EqualsAndHashCode

注解在类上 实现equals()方法和hashCode()方法用于对象直接比较

@Data

注解在类上提供类所有属性的 getXxx 和 setXxx 方法,此外还提供了equals、canEqual、hashCode、toString 方法

@NoArgsConstructor

注解在类上为类提供一个无参的构造方法

当类中有 final 字段没有被初始化时,编译器会报错,此时可用 @NoArgsConstructor(force = true),然后就会为没有初始化的 final 字段设置默认值 0 / false / null。 对于具有约束的字段(例如 @NonNull 字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效。

@AllArgsConstructor

注解在类上为类提供一个全参的构造方法

默认生成的方法是 public 的,如果要修改方法修饰符可以设置 AccessLevel 的值。如@AllArgsConstructor(access = AccessLevel.PROTECTED)

@RequiredArgsConstructor

注解在类上,会生成构造方法(可能带参数也可能不带参数)

如果带参数,这参数只能是以final 修饰的未经初始化的字段或者是以 @NonNull 注解的未经初始化的字段。

该注解还可以用 @RequiredArgsConstructor(staticName="methodName") 的形式生成一个指定名称的静态方法,返回一个调用相应的构造方法产生的对象

@Builder

注解在类上实现一种Builder Patterns(生成器模式)的功能也就类似于函数链式赋值调用如

java 优雅编程 之lombok开发利器

其他bean

@Slf4j/@Log4j2

注解在类上为类提供一个 属性名为log的日志对象用户为该类提高日志记录

@Synchronized

注解到方法上实现同步代码片段的功能也就是此方法同步执行

@SneakyThrows

注解到方法上可以实现在try...catch到异常后进行的throw操作

更多详细注解点击进入官网

模版代码示例

pojo

package cn.soboys.springbootmybatisplus.bean;

import lombok.*;

import java.io.Serializable;

/**
 * @author kenx
 * @version 1.0
 * @date 2021/6/29 10:03
 */

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@ToString
@Builder
public class User  implements Serializable {
    private static final long serialVersionUID = 6308315887056661996L;
    private String username;
    private int age;
    private String phone;
    private String addr;
}

测试

 @Test
    public void t() {

        //// 通用模式构建对象
        User u1 = new User();
        u1.setUsername("keawe");

        // Builder模式构建对象
        User u = User.builder().build();
        u.setUsername("kenx");

        User user = User.builder()
                .age(18).username("kennx").phone("12313241").addr("232").build();

        // 全参构造
        // 需要注意的是Lombok提供的全参构造是依赖属性在对象中定义顺序的,
        User u2 = new User("judy", 12, "120198341", "wewe");
        User u3 = new User("judy", 12, "120198341", "wewe");

        // toString使用
        System.out.println("toString" + user);
        System.out.println("toString"+u2);

        // equals()使用
        System.out.println("equals" + u.equals(user));
        //对象属性完全一样就是true
        System.out.println("equals" + u2.equals(u3));
    }

测试结果正常

java 优雅编程 之lombok开发利器

上面注解可以简化成如下

@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public class User  implements Serializable {
    private static final long serialVersionUID = 6308315887056661996L;
    private String username;
    private int age;
    private String phone;
    private String addr;
}

因为@Data注解就包含geXxx,SetXX,toString,equals、canEqual、hashCode方法不需要我们在单独写其注解

普通

package cn.soboys.springbootmybatisplus;

import cn.soboys.springbootmybatisplus.bean.User;
import lombok.SneakyThrows;
import lombok.Synchronized;
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;


/**
 * @author kenx
 * @version 1.0
 * @date 2021/6/29 10:02
 */
@Slf4j
public class LombokTest {

    @Test
    @Synchronized
    @SneakyThrows
    public void a() {
        log.info("1421121");
        throw new Exception("wew");
    }
}

关注公众号猿人生获取更多干货分享

java 优雅编程 之lombok开发利器

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
SpringBoot配置lombok,与logback
目录:一什么是lombok二lombok安装三使用lombok四使用logback一什么是lombok  在写Java程序的时候经常会遇到如下情形:新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter,setter方法还有构造函数等。  lombok项目的产生就是为了省去我们手动创
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Easter79 Easter79
3年前
SpringBoot配置lombok,与logback
目录:一什么是lombok二lombok安装三使用lombok四使用logback一什么是lombok  在写Java程序的时候经常会遇到如下情形:新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter,setter方法还有构造函数等。  lombok项目的产生就是为了省去我们手动创
Stella981 Stella981
3年前
Idea插件lombok的安装和使用
  C在写一个实体类时,有属性的写法,省去了写getter和setter的麻烦。  在Java编程时,写完字段后,需要一个一个去写getter和setter方法。在使用Idea编程时,可以按住ALTINSERT键,让IDE自动生成getter,setter,toString等方法,如下图:!(https://static.oschina.