java 优雅编程 之lombok开发利器

kenx
• 阅读 1673

我们知道在最开始学习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开发利器

点赞
收藏
评论区
推荐文章
光头强的博客 光头强的博客
1星期前
Java面向对象试题
1、 请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。 创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现 接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿 吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
blmius blmius
1年前
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:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
kenx kenx
1年前
个人博客开发之blog-api项目统一结果集api封装
前言由于返回json api 格式接口,所以我们需要通过java bean封装一个统一数据返回格式,便于和前端约定交互, 状态码枚举ResultCodejavapackage cn.soboys.core.ret;import lombok.Getter;/ @author kenx @version 1.0 @date 2021/6/17 15:35
Stella981 Stella981
11个月前
SpringBoot配置lombok,与logback
目录: 一 什么是lombok 二 lombok安装 三 使用lombok 四 使用logback 一 什么是lombok   在写Java程序的时候经常会遇到如下情形:新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter,setter方法还有构造函数等 。   lombok项目的产生就是为了省去我们手动创
Easter79 Easter79
11个月前
swap空间的增减方法
(1)增大swap空间 去激活swap交换区: #swapoff -v /dev/vg00/lvswap 扩展交换lv: #lvextend -L 10G /dev/vg00/lvswap 重新生成swap交换区: #mkswap /dev/vg00/lvswap 激活新生成的交换区: #swapon -v /dev/vg00/lvswap
Wesley13 Wesley13
11个月前
Java爬虫之JSoup使用教程
title: Java爬虫之JSoup使用教程 date: 2018-12-24 8:00:00 +0800 update: 2018-12-24 8:00:00 +0800 author: me cover: [https://img-blog.csdnimg.cn/20181224144920712](https://www.oschin
Easter79 Easter79
11个月前
Twitter的分布式自增ID算法snowflake (Java版)
概述 == 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
11个月前
Lombok经常用,但是你知道它的原理是什么吗?
相信大家在项目中都使用过Lombok,因为能够简化我们许多的代码,但是该有的功能一点也不少。那么lombok到底是个什么呢,lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,简单来说,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下我们需要手动去建立getter和setter方法啊,构造函
Stella981 Stella981
11个月前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“**Java进阶架构师**”,点击右上角,将我们设为**★**“**星标**”!这样才不会错过每日进阶架构文章呀。   ![](http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)   **2
Stella981 Stella981
11个月前
Idea插件lombok的安装和使用
  C#在写一个实体类时,有属性的写法,省去了写getter和setter的麻烦。   在Java编程时,写完字段后,需要一个一个去写getter和setter方法。在使用Idea编程时,可以按住ALT+INSERT键,让IDE自动生成getter, setter, toString等方法,如下图: ![](https://static.oschina.
helloworld_34035044 helloworld_34035044
2个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。 uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid() 或 uuid(sep)参数说明:sep 布尔值,生成的uuid中是否包含分隔符'',缺省为