手动编译 lombok_Lombok,一种编译时Java注释预处理器,可最大程度地减少代码大小...

手动编译 lombok

在本文中,我们将看到如何在常规Java代码中使用lombok来最大程度地减少代码长度和冗余。

什么是Lombok?

Lombok,一个编译时注释预处理器,有助于在编译时注入一些代码。 在详细介绍之前,我要求您应该从他们的网站上观看视频。 我不会像这样进行现场演示,但是我将展示如何在项目内部使用它(包括Maven生命周期)。

让我们从基本的了解开始。 如我所知,lombok是一个编译时注释预处理器。 那是什么意思

->它将在编译时起作用(我们可以在编写代码时看到效果)
->我们需要在编译过程中使用类路径进行依赖(使用javac命令执行)
->我们需要插件支持才能在编码时看到IDE中的效果。(因为IDE在编码/保存过程中会进行编译)

Lombok有几个实用程序/功能。 我们将介绍到目前为止我使用过的主要项目。

注意:要了解批注,您可能会看到我的这篇文章。

安装方式

Eclipse:从此链接下载并安装(您需要显示eclipse安装目录)

shantonu_Selection_050

shantonu_Selection_051

(我已经检查了STS / eclipse版本:3.7.3.RELEASE)

Intellij IDEA:只需安装lombok插件。 (文件->设置->插件->搜索/浏览以查看,然后安装)

或: 插件链接

现在:基于IDE行为,您可能需要启用注释预处理器才能使插件正常工作。 (通常现代IDE具有此默认设置)

从Eclipse:

shantonu_Selection_058

IntelliJ IDEA:

shantonu_Selection_057

项目设置:

我将使用Maven(您可以以相同的方式使用gradle)。 我的Maven版本是3.3.9。

步骤1:在pom.xml中,添加依赖项

dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.8</version></dependency>
</dependencies>

您可能会从Maven Central获得更新的版本。

步骤2:如我们所见,lombok是编译时预处理器,因此,我们需要编译器。 因此,在build-> plugins-> plugin内添加maven编译器插件

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><compilerVersion>1.8</compilerVersion><source>1.8</source><target>1.8</target></configuration>
</plugin>

可以看到,我已经将源和目标版本定义为1.8。

步骤3:现在我们需要添加lombok插件以在项目编译期间工作。 为此,我们需要在插件管理中输入内容,并在构建部分添加带有参数的插件。

<pluginManagement><plugins><plugin><groupId>org.projectlombok</groupId><artifactId>lombok-maven-plugin</artifactId><version>1.16.8.0</version></plugin></plugins>
</pluginManagement>

用参数添加插件

<plugin><groupId>org.projectlombok</groupId><artifactId>lombok-maven-plugin</artifactId><version>1.16.8.0</version><configuration><encoding>UTF-8</encoding></configuration><executions><execution><phase>generate-sources</phase><goals><goal>testDelombok</goal><goal>delombok</goal></goals></execution></executions>
</plugin>

这里的空间说明:

1.编码是必要的
2.您可以看到我使用了2个目标 ,这些是为测试和源范围定义为lombok定义的空间目标。 我同时使用两者,因为我的测试代码也需要lombok。

因此,我的构建部分就是这个。

<build><pluginManagement><plugins><plugin><groupId>org.projectlombok</groupId><artifactId>lombok-maven-plugin</artifactId><version>1.16.8.0</version></plugin></plugins></pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><compilerVersion>1.8</compilerVersion><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.projectlombok</groupId><artifactId>lombok-maven-plugin</artifactId><version>1.16.8.0</version><configuration><encoding>UTF-8</encoding></configuration><executions><execution><phase>generate-sources</phase><goals><goal>testDelombok</goal><goal>delombok</goal></goals></execution></executions></plugin></plugins>
</build>

并且,对于日志记录,我们需要具有依赖性。 我将添加所有类型的日志示例。 所以将所有这些加在一起

<!--Logging external dependencies--><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version>
</dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.21</version>
</dependency>
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.21</version>
</dependency>
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-ext</artifactId><version>1.7.21</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.5</version>
</dependency>

因此,最后我的POM的构建部分如下所示 。

现在,该看一下每个功能的用法了:

注意:对于eclipse和IntelliJ,我都使用“大纲视图”来查看效果。 要启用大纲:

Eclipse:窗口->显示视图->大纲

IntelliJ:查看->工具按钮,将进行结构化。

@Getter @Setter:它使带有变量的getter setter变得麻木。 它还支持访问级别参数,以定义获取器和设置器的范围。

参数:采用枚举参数AccessLevel
PUBLIC =公开可用
MODULE,PACKAGE =与默认值相同(不使用任何修饰符) 受保护=与受保护相同 私人=与私人相同 NONE =不会执行

shantonu_Selection_054

在课堂上:
shantonu_Selection_055
覆盖类级别的getter: shantonu_Selection_056 @ToString:这是toString()的实现,我们只能用于类级别。

参数:

includeFieldNames():布尔类型=>定义所有字段包含
callSuper():布尔类型=>调用super
doNotUseGetters():布尔类型=>避免使用字段的获取器。 exclude():字段名称的字符串数组=>定义字段排除 of():字段名称的字符串数组=>定义要添加的字段(显式)

shantonu_Selection_059

@Data:它是多个注释的组合。
哪里:我们可以在类/类型之前使用

参数:

注意:数据包括
1. @Getter,
2. @Setter。 3. @RequiredArgsConstructor 4. @Tostring 5. @EqualsAndHashCode

范例:

蚀:
shantonu_Selection_052

IntelliJ:

shantonu_Selection_053

@Value:这只是@Data的不变值类型。

参数:staticConstructor条目将默认构造函数设为私有

shantonu_Selection_070

@Builder:在您的班级中添加默认的构建器类。 它只是一个构建器(如带有参数的构建器模式,请参见图像中的示例)

@Singular:用于通知集合(仅支持guava和Java util)。 它包括2种加法器方法,单次添加,全部添加。
shantonu_Selection_069

val:这使局部最终变量(内部方法)

(紧接在this()或super()之后)

用途:

1.像var(js / c#)一样使用,它将作为最终版本

2.在foreach循环中。

public class ValExample {
val items;public void  aMethod() {val store = new Hashtable<String, String>();store.put("one", new String("Shantonu"));val func = store.get("one");System.out.println(func.toLowerCase());store.put("two", "Andrii");store.put("three", "Oleks");for(val v: store.entrySet()){System.out.println("KEY =" +v.getKey()+", VAL = "+ v.getValue());}}
}

shantonu_Selection_069
@NotNull:这将对变量添加null检查,并引发null指针异常。

使用范围:方法,参数,局部变量

无需检查
shantonu_Selection_065

与@NotNull

shantonu_Selection_066

@EqualsAndHashCode:它简单地将equals(Object other)和hashCode()添加到类中。 (因此它是类级别的注释)。

它支持用于自定义这些equals和哈希码方法的参数。 所有参数均与@ToString相同。

shantonu_Selection_071

@Cleanup:这是清除资源的简单方法。 它实际上确保了资源的close()方法将在try的finally块中被调用。

仅局部变量:

调用资源的关闭方法。 如果您有另一个方法名称,则需要调用value = thatMehtodName(例如exit)

您可以从这里看到一个简单的示例。 无需尝试捕获。

public class CleanupEx {public static void main(String[] args) throws IOException {String pom = System.getProperty("user.dir") + "/pom.xml";String io  = System.getProperty("user.dir") + "/logs/io.txt";@Cleanup InputStream in = new FileInputStream(pom);@Cleanup OutputStream out = new FileOutputStream(io);int reading;char c;while ((reading=in.read())!=-1){c=(char)reading;out.write(c);}out.flush();}
}

注意:我认为,当您不关心管理资源时,最好使用此功能。 如果您想按逻辑使用资源,最好避免这种情况。 例如,多线程资源的用法。

使用lombok记录:

@log:这是最好的可用功能之一。 此图显示了要收集的所有记录器。 我在github中的示例将显示详细信息。

我们需要在上课之前设置日志,仅此而已。 它会提供一个静态变量日志,我们可以根据使用的日志类型来使用它。

Parameter:它将主题作为参数,默认情况下是类名。 我们可以设置日志主题。

注意:对于不同的日志实现,我们需要不同类型的配置。 Lombok不提供任何配置帮助,仅注入代码。 因此,我们需要添加取决于我添加的日志类型。

我在github中的示例包含所有6种日志配置类型。 仔细查看pom文件以了解依赖关系以及配置文件的资源。

shantonu_Selection_060

Lombok示例github链接 :https://github.com/sarkershantonu/practice-projects/tree/master/lombok-examples

注意:由于没有测试范围(空间@Synchronized),我跳过了更多常规功能和实验功能。 我将在github存储库中一个接一个地添加其他内容,并在此处添加参考注释。

翻译自: https://www.javacodegeeks.com/2016/06/lombok-compile-time-java-annotation-preprocessor-minimize-code-size.html

手动编译 lombok

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql超大表处理方式是_第29问:MySQL 的复制心跳说它不想跳了

问题最近年底&#xff0c;大家的数据库经常跑批量大事务&#xff0c;会发现复制突然断开&#xff0c;报错“心跳与本地信息不兼容”&#xff1a;会是什么原因&#xff1f;实验我们先来复现一下&#xff0c;再进行分析。宽油&#xff0c;做一对主从数据库&#xff1a;我们先造一…

sap 分摊分配不产生会计凭证的原因_SAP软件的物料分类账功能

物料账介绍物料分类账(Material Ledger)是SAP财务模块的重要功能之一&#xff0c;用于对标准价计价的物料进行差异处理。激活ML后&#xff0c;系统会在"工厂物料"层(或更细的层次)为每个物料建立子账簿&#xff0c;记录该物料在各个期间的数量、价值变化情况。月底运…

忽略异常_忽略已检查的异常,所有出色的开发人员都在这样做–基于600,000个Java项目...

忽略异常Github和Sourceforge上超过600,000个Java项目中的异常处理概述 Java是使用检查异常的少数几种语言之一。 它们在编译时强制执行&#xff0c;并且需要某种处理。 但是……在实践中会发生什么&#xff1f; 大多数开发人员实际上会处理任何事情吗&#xff1f; 他们怎么做…

数据结构【队列专题】

先进先出&#xff08;First In First Out&#xff0c;FIFO&#xff09;的线性序列&#xff0c;成为“队列”。 队列也是一种线性表&#xff0c;只不过它是操作受限的线性表&#xff0c;只能在两端操作&#xff1a; 一端进&#xff0c;一端出。进的一端成为队尾&#xff08;re…

oracle安装卡在create inventory_滴滴云服务器上安装Oracle12cR2单实例数据库

一、相关说明Oracle数据库是由美国甲骨文公司推出的一款优秀的关系型数据库。当前最新版为Database 19c。本文简述Oracle Database 12cR2在滴滴云主机上的安装过程。如需更权威的指导方法请参考Oracle官方安装文档。二、环境概述一台DC2云主机&#xff08;2c4g&#xff09;一个…

【WebRTC---序篇】(二)Windows平台WebRTC源码编译

需要准备的东西 (一)一个强大的梯子(懂得都懂)!!!!!!!!! (二) 下载depot_tools Windows指定地址必须在此下载 打开这个页面,找 install depot_tools 这个关键字 请把他解压到C盘,并且设置到PATH环境变量种,且让它处于最顶端。 其他需要设置的额外变量 DEPOT_TOOLS_…

商品管理后台发布商品时,规格值组合的前端交互的实现逻辑

方案1&#xff1a;先计算总行数&#xff0c;再循环填充规格值 根据每种规格值数量计算得到总行数&#xff0c;如果下图有3种规格&#xff1a;长度、重量、大小&#xff0c;规格值个数分别为&#xff1a;3、3、2,3x3x218行。 规格种类有3种&#xff0c;于是写3层嵌套递归循环填…

【WebRTC---源码篇】(五)WebRTC视频引擎

1. 视频数据的采集时间 2.视频分发器VideoBroadCaster

activiti异步执行_对基于消息队列的Activiti异步执行器进行基准测试

activiti异步执行一点历史 永无休止的一件事是&#xff0c;Activiti在某些非常大的规模的大型组织中的使用方式。 过去&#xff0c;这导致了各种优化和重构&#xff0c;其中包括异步执行器-替换旧的作业执行器。 对于未启动的用户&#xff1a;这些执行器在流程实例中处理计时器…

chrome浏览器设置网页快速到顶部和到底部的方法

鼠标移到浏览器的书签任意位置&#xff0c;点击鼠标右键添加书签&#xff0c;在添加书签的窗口输入名称和js代码&#xff0c;然后把书签移到浏览器书签栏的最左侧&#xff0c;这样每次浏览网页就可以使用快捷方式快速到底部或者顶部了。 快速到顶部的js代码&#xff1a;javascr…

apache pdfbox_Apache PDFBox命令行工具:无需Java编码

apache pdfbox在博客文章Apache PDFBox 2中 &#xff0c;我演示了将Apache PDFBox 2用作从Java代码中调用的库来操作PDF。 事实证明&#xff0c;Apache PDFBox 2还提供了可以直接从命令行直接使用的命令行工具 &#xff0c;而无需其他Java编码。 有几种命令行工具可用&#xff…

【WebRTC---源码篇】(六)NACK判断包位置的关键算法

首先保证a与b不相等 template <typename T, T M = 0> inline bool AheadOf(T a, T b) {static_assert(std::is_unsigned<T>::value,"Type must be an unsigned integer.");return a != b && AheadOrAt<T, M>(a, b); } template <type…

spring集成mq_使用Spring Integration Java DSL与Rabbit MQ集成

spring集成mq我最近参加了在拉斯维加斯举行的2016年Spring大会 &#xff0c;很幸运地看到了我在软件世界中长期敬佩的一些人。 我亲自遇到了其中的两个人&#xff0c;他们实际上合并了几年前我与Spring Integration相关的一些次要贡献– Gary Russel和Artem Bilan &#xff0c;…

MyEclipse 如何使用断点调试

文章目录1、在需要的代码行处打断点右键添加断点双击添加断点快捷键添加断点2、以debug模式开启服务器通过debug执行列表&#xff0c;选择服务器启动当前程序按右键&#xff0c;选择debug as&#xff0c;再选择服务器启动开发视图底部server列表选择服务器开启debug视图&#x…

【WebRTC---源码篇】(八)音频数据采集

ADM的创建 1.Audio Device Module是在逻辑层与硬件设备层之间进行了转换,需要使用什么功能,调用什么接口就可以,不要管底层平台实现。 2.AudioDeviceModule是一个接口类,定义了一系列接口。最终实现由子类AudioDeviceModuleForTest实现,其中包括一些测试函数(对设备的…

jsf netbeans_NetBeans Java EE技巧9:从数据库创建JSF应用程序

jsf netbeans您需要非常快速地创建数据库前端吗&#xff1f; NetBeans IDE允许人们以很少的代码就为一组数据库表开发JSF应用程序前端。 现在&#xff0c;本教程是一个老歌&#xff0c;但是一个好东西……对于那些不了解它的人来说&#xff0c;值得再次提及。 首先&#xff0c…

cloud foundry_介绍“又一个” Cloud Foundry Gradle插件

cloud foundry在与两个同事&#xff08;感谢Mark Alston和Dave Malone &#xff01;&#xff09;一起使用自动Jenkins管道部署Cloud Foundry应用程序的过程中&#xff0c;我决定尝试编写Gradle插件来执行一些通常需要完成的任务使用命令行Cloud Foundry Client完成 。 引入一个…

Oracle/MySQL/Java数据类型对应表

文章目录数据类型对照表MySQL 的 int、bigint、mediumint、smallint、tinyint 的对比关于 MySQL 整型显示位数的问题关于 MySQL 的 timestamp关于 JDBC 类型数据类型对照表 MysqlOracleJavaBIGINTNUMBER(19,0)java.lang.LongBITRAWbyte[]BLOBBLOB RAWbyte[]CHARCHARjava.lang.…

java10个基础错误_我们处理了10亿个Java记录的错误-这是导致97%的错误的原因

java10个基础错误97&#xff05;的记录错误是由10个唯一错误引起的 在2016年&#xff0c;一件事在30年内没有改变。 开发和运营团队仍依靠日志文件对应用程序问题进行故障排除。 由于某些未知原因&#xff0c;我们隐式信任日志文件&#xff0c;因为我们认为事实隐藏在其中。 如…

3制造数据集_基于MBD的产品设计制造技术研究

本篇节选自论文《基于MBD的产品设计制造技术研究》&#xff0c;发表于《中国电子科学研究院学报》第8卷第6期&#xff0c;作者为中国电子科技集团公司第14研究所专家朱建军。本文经授权转载自公众号学术plus&#xff0c;版权归原作者所有。作者&#xff1a;中国电子科技集团公司…