Lombok插件讲解

Lombok插件讲解Lombok 是什么 lombok 是 java 自动生成代码的插件 它能提高开发效率 减少自己编写繁琐的代码 让代码看起来更整洁简略 比如 getter setter equals 以及 construct 等方法 其也有 val var 这种自动判断变量类型的变量定义方式 类似 javascript 中的 let const Lombok 使用在开发 ide 中安装 lombok 插件 然后加上 lombok 的依赖包

Lombok是什么?

lombok是java自动生成代码的插件。它能提高开发效率,减少自己编写繁琐的代码,让代码看起来更整洁简略,比如getter、setter、equals以及construct等方法。其也有val、var这种自动判断变量类型的变量定义方式(类似javascript中的let、const)。

Lombok使用

在开发ide中安装lombok插件,然后加上lombok的依赖包即可。如下以idea为例:

  • 插件
    这里写图片描述
    • 依赖




 <dependencies> <dependency> <groupId>org.projectlombok    groupId> <artifactId>lombok    artifactId> <optional>true    optional>     dependency>     dependencies>

Lombok特性

val

val可以用于定义局部变量,能根据变量的初始化值来推断出变量的类型,且用final进行修饰。示例如下:

import lombok.val; import java.util.ArrayList; public class ValExample { public static void main(String[] args){ val array = new ArrayList 
  
    (); array.add( 
   "val.."); 
   for(val obj: array){ System. 
   out.println(obj); } } } 
  

var

var和val类似,区别在于不再有final进行修饰。

@NonNull

该注解可以用于参数的空指针检查,避免出现讨厌的空指针问题。示例如下:

import lombok.NonNull; public class NonNullExample { private Person person; public NonNullExample(@NonNull Person person){ this.person = person; } class Person { private String name; private Integer age; Person(String name, Integer age){ this.name = name; this.age = age; } } }

如下是编译后的代码:

import lombok.NonNull; public class NonNullExample { private NonNullExample.Person person; public NonNullExample(@NonNull NonNullExample.Person person) { if (person == null) { throw new NullPointerException("person is marked @NonNull but is null"); } else { this.person = person; } } class Person { private String name; private Integer age; Person(String name, Integer age) { this.name = name; this.age = age; } } }

@Cleanup

该注解可以进行资源自动管理,在作用域结束时进行资源回收。当一个局部变量被@Cleanup进行修饰时,整个变量的作用域范围会被try/finally 代码块进行包裹,在finally中调用资源回收的close方法(默认为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); } } }

编译后的代码显示如下:

 import java.io.*; public class CleanupExample { public static void main(String[] args) throws IOException { InputStream in = new FileInputStream(args[0]); try { OutputStream out = new FileOutputStream(args[1]); try { byte[] b = new byte[10000]; while (true) { int r = in.read(b); if (r == -1) break; out.write(b, 0, r); } } finally { if (out != null) { out.close(); } } } finally { if (in != null) { in.close(); } } } }

当然,如果某个变量类型没有close方法,而有其他的无参(只有无参的才能用户@Cleanup进行修饰,有参的不能)的资源回收的方法,可以用以下的方式进行申明变量(官网案例):

@Cleanup("dispose") org.eclipse.swt.widgets.CoolBar bar = new CoolBar(parent, 0); 

@Getter/@Setter

这两个注解可以用于修饰成员变量,也可以用于修饰类,会自动生成标准javabean的getter和setter方法。生成的getter和setter方法的public域,这个是可以控制的。示例如下:

import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; public class GeterSeterExample { 
    @Getter@Setter private String name; @Getter(value = AccessLevel.PROTECTED) @Setter(value = AccessLevel.PROTECTED) private String size; }

@ToString

控制重载toString方法。

@EqualsAndHashCode

生成equals和hashCode函数。

@NoArgsConstructor, @AllArgsConstructor

生成无参构造函数和全参构造函数。示例如下:

import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor public class ConstructExample { 
    private String name; private String dec; }
public class ConstructExample { private String name; private String dec; public ConstructExample() { } public ConstructExample(String name, String dec) { this.name = name; this.dec = dec; } }

@Data

@Builder

生成创建对象的builder方法api,示例如下:

import lombok.Builder; @Builder public class BuilderExample { 
    private String name; private String dec; }

编译后的代码如下:

public class BuilderExample { private String name; private String dec; BuilderExample(String name, String dec) { this.name = name; this.dec = dec; } public static BuilderExample.BuilderExampleBuilder builder() { return new BuilderExample.BuilderExampleBuilder(); } public static class BuilderExampleBuilder { private String name; private String dec; BuilderExampleBuilder() { } public BuilderExample.BuilderExampleBuilder name(String name) { this.name = name; return this; } public BuilderExample.BuilderExampleBuilder dec(String dec) { this.dec = dec; return this; } public BuilderExample build() { return new BuilderExample(this.name, this.dec); } public String toString() { return "BuilderExample.BuilderExampleBuilder(name=" + this.name + ", dec=" + this.dec + ")"; } } }

@Synchronized

安全的加锁,控制同步。引用官网的例子,如下所示:

import lombok.Synchronized; public class SynchronizedExample { 
    private final Object readLock = new Object(); @Synchronized public static void hello() { System.out.println("world"); } @Synchronized public int answerToLife() { return 42; } @Synchronized("readLock") public void foo() { System.out.println("bar"); } }
public class SynchronizedExample { 
    private static final Object $LOCK = new Object[0]; private final Object $lock = new Object[0]; private final Object readLock = new Object(); public static void hello() { synchronized($LOCK) { System.out.println("world"); } } public int answerToLife() { synchronized($lock) { return 42; } } public void foo() { synchronized(readLock) { System.out.println("bar"); } } }

@Log

log注解是用于使用log日志输出的,其包含@Log、@Log4j、@Log4j2、@Slf4j等等。这里以@Slf4j为例,如下:

import lombok.extern.slf4j.Slf4j; @Slf4j public class LogExample { public static void main(String... args) { log.info("log info"); } }

@Slf4j注解会自动帮我们生成如下代码:

 private static final Logger log =LoggerFactory.getLogger(LogExample.class);

谏言

这篇文档并没有介绍全部的特性,如果想了解更多或者对以上的特性进行更深入的了解,请浏览 官方文档

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213111.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:31
下一篇 2026年3月18日 下午6:32


相关推荐

  • 将WebStorm快捷键修改为eclipse的快捷键风格

    将WebStorm快捷键修改为eclipse的快捷键风格说明:由于大家都熟练使用了eclipse、MyEclipse等软件,其快捷键也应用熟练,所以大家在用WebStorm时,可以将WebStorm的快捷键风格(映射)改为大家常用的eclipse风格快捷键。 修改方法  File(文件)–&gt;Settings…(设置…)–&gt;快捷键–&gt;Keymap(快捷键映射)下拉选择eclipse,应用确定即可。  …

    2022年6月23日
    37
  • VLDB论文解读:阿里云超大规模实时分析型数据库AnalyticDB「建议收藏」

    VLDB论文解读:阿里云超大规模实时分析型数据库AnalyticDB「建议收藏」1、背景随着数据量的快速增长,越来越多的企业迎来业务数据化时代,数据成为了最重要的生产资料和业务升级依据。伴随着业务对海量数据实时分析的需求越来越多,数据分析技术这两年也迎来了一些新的挑战和变革:在线化和高可用、离线和在线的边界越来越模糊,一切数据皆服务化、一切分析皆在线化; 高并发低延时,越来越多的数据系统直接服务终端客户,对系统的并发和处理延时提出了新的交互性挑战; 混合负载,一套实时分析系统既要支持数据加工处理,又要支持高并发低延时的交互式查询; 融合分析,随着对数据新的使用方式探索,需

    2025年12月12日
    3
  • h2数据库如何连接_怎样远程连接数据库

    h2数据库如何连接_怎样远程连接数据库H2数据库支持如下3种连接模式: 内嵌模式(通过JDBC进行本地连接,应用和数据库在同一个JVM中) 服务器模式(通过JDBC或ODBC或TCP/IP进行远程连接) 混合模式(同时支持本地和远程连接)数据库连接URL说明:TopicURLFormatandExamples嵌入式(本地)连接jdb

    2022年10月11日
    7
  • java渗透测试框架_java编程

    java渗透测试框架_java编程(7)sqlmap(python脚本学习下)经典sql注入工具(这种针对参数的工具,不知道是不是扫描方式有问题,还是怎么着,怎么才能抓几个包,或者把常用点的包抓出来)抓几个sqlmap的包sqlmap功能很强大,这里就抓了一个结合burpsuitePOSTsqlmap的包(也可以用Burpsuitesqlmap插件http://www.freebuf.com/tools/6426.html)命令:…

    2022年8月12日
    7
  • 聊一聊最近热门缺货的安森美 Python1300/300系列CMOS图像传感器型号互替问题

    聊一聊最近热门缺货的安森美 Python1300/300系列CMOS图像传感器型号互替问题作者 Hello Panda2021 年在电子产品领域最热的关键词可能是 缺货 涨价 和 替代料 从最初的车载芯片市场开始 到单片机 到电源芯片 然后是各种 PHY 接口 直至到 FPGA 等高端市场 这几个主题词一直贯彻到底 对于大多数的没有备货和必须从代理或市场拿货的中小型企业而言 无疑是一次地毯式的打击 大家有的选择各种渠道积极找料 有的选择寻找对应的替代方案 有的选择 躺平 等等 咱暂且不论这背后的故事 到底是真缺还是假缺 到底是被迫缺还是人为缺等等 简单的聊一下今天吹水的主题 几款热门的安森美

    2026年3月19日
    1
  • windws7下Loadrunner12的使用教程详解「建议收藏」

    windws7下Loadrunner12的使用教程详解「建议收藏」一.初识LoadRunner( 点击链接跳转到LoadRunner的安装步骤)1.简介:(1)从LoadRunner英语字面上进行理解就是负载跑步者,为什么这么说呢?对于从事IT软件行业的工作者如开发人员和测试人员来说一定不会感到陌生就是在承受负载的条件下运行软件或者网页的业务。从另一个比较形象的理解就是“压死骆驼的最后一根稻草”这里的稻草就是软件的事务,LoadRunner这款软件…

    2022年10月14日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号