手动编译 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,一经查实,立即删除!

相关文章

MyEclipse for Windows快捷键

文章目录编辑查询/替换导航调试重构其他自定义快捷键技巧编辑 快捷键功能说明Ctrl1快速修复&#xff08;最经典的快捷键,就不用多说了&#xff0c;可以解决很多问题&#xff0c;比如import类、try catch包围等&#xff09;CtrlShiftF格式化代码。团队有统一的代码格式&#xf…

微信小程序view动态长度_微信小程序实现动态获取元素宽高的方法分析

本文实例讲述了微信小程序实现动态获取元素宽高的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;我以前一直以为微信小程序不能动态获取view元素的宽高。但是自从看到&#xff1a; wx.createSelectorQuery() 这个api接口&#xff0c;以前的某些问题就能得到解决了…

数据结构【双指针算法】

双指针一般应用于维护两个队列&#xff0c;或者同一队列。 常见写法如下 for (int i 0, j 0; i < n; i){while (j < i && check(i, j)) j;//每道题的具体逻辑} 双指针的核心思想是把如下O(n^2)的算法优化位O(n) for (int i 0; i < n; i){for (int j 0; …

antlr 语言 库_关于ANTLR的通用库的需求:使用反射来构建元模型

antlr 语言 库我是一名语言工程师&#xff1a;我使用多种工具来定义和处理语言。 在其他工具中&#xff0c;我使用ANTLR&#xff1a;它简单&#xff0c;灵活&#xff0c;可以围绕它进行构建。 但是我发现自己围绕ANTLR为不同的项目重建了类似的工具。 我看到两个问题&#xff…

Windows 如何通过命令启动和关闭 Tomcat

首先你的系统要安装tomcat&#xff0c;至于如何安装tomcat这里就不讲解了&#xff0c;接着你打开windows的DOS命令终端&#xff08;winR打开运行窗口&#xff0c;输入cmd即可&#xff09;&#xff0c;然后通过DOS命令切换到tomcat安装目录下的bin目录&#xff0c;最后执行start…

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

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

Java的访问控制修饰符_访问权限修饰符_访问权限修饰词

public > protected > (default) > private 1.public 修饰的&#xff0c;在任何地方都可以访问 2.protected 修饰的&#xff0c;在类内部、同一个包、子类中能访问 3.default 表示在本类中、同一个包中能访问&#xff0c;但是在代码中不可以直接写 default&#xff0…

red hat安装宝塔_只需几分钟即可安装Red Hat Container Development Kit(视频)

red hat安装宝塔自从我开始使用各种形式的OpenShift&#xff08;例如带盒的Online&#xff0c;然后又作为容器化的图像&#xff09;玩耍以来&#xff0c;没有什么比Red Hat Container Development Kit&#xff08;CDK&#xff09;的可用性令我兴奋。 该套件使您可以轻松地访问…

基于RTP的QOS算法简介

服务质量QoS&#xff08;Quality of Service&#xff09;用于评估服务方满足客户服务需求的能力。通过配置QoS&#xff0c;对企业的网络流量进行调控&#xff0c;避免并管理网络拥塞&#xff0c;减少报文的丢失率&#xff0c;同时也可以为企业用户提供专用带宽或者为不同的业务…

es修改type名称_ElasticSearch如何修改索引字段

一、需求 当es字段类型无法支撑业务需求,需要修改到字段类型的时候。例如修改字段类型从Integer变成double,这种情况下,是没办法修改es的字段的type的。 原因是一个字段的类型进行修改之后,ES会重新建立对这个字段的索引信息,ElasticsSearch的底层是Lucene库,字段类型修改…

MyEclipse for Windows 关于 java、jsp、xml、js、html 等文件的注释快捷键及注释格式介绍

文章目录java 的注释单行注释多行注释文本注释jsp 的注释第一种第二种第三种css 的注释js 的注释单行注释奇葩的单行注释多行注释文档注释xml 的注释html 的注释java 的注释 单行注释 public class HelloWorld{public static void main(String [] args){System.out.println(&…

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…

软件项目的命名规范/命名规则

文章目录项目名称目录名称包命名虚拟目录资源路径Java 代码命名属性文件 properties 命名xml文件命名jsp文件命名html文件命名js文件命名css文件命名图片文件命名数据库命名html标签的属性值命名规则项目名称 使用小串式命名法 项目名称使用英文&#xff0c;全部字母小写&…

数据结构【高精度专题】

// 高精度加法 // C A B, A > 0, B > 0 vector<int> add(vector<int> &A, vector<int> &B) {if (A.size() < B.size()) return add(B, A);vector<int> C;int t 0;for (int i 0; i < A.size(); i ){t A[i];if (i < B.size…

react java_独眼巨人React组织了Java 8库的寒武纪爆发

react java什么是独眼巨人React&#xff1f; Lambda表达式和默认方法在Java 8中的到来预示了Java语言十年来最大的结构性变化。 在此基础上构建了一些新的很酷的API&#xff0c;例如Stream, Optional, CompletableFuture最终Java开发人员可以以更实用的样式进行编码。 尽管这是…

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

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

MyEclipse的build、clean、publish、clean(redeploy)的区别

文章目录buildcleanpublishclean(redeploy)新增了java文件或者修改了已有的java文件删除了java文件或者包修改了classes目录以外的文件build 就是将工程src目录的内容全新输出到工程的classes目录下&#xff0c;全面覆盖旧的文件&#xff0c;需要编译的会编译后再输出 clean …

jgroups_JGroups:无需额外基础架构的领导人选举

jgroups嗨&#xff0c;您好&#xff0c; 在本文中&#xff0c;我将展示如何在不使用任何其他基础架构&#xff08;例如Apache Zookeeper或Consul&#xff09;的情况下解决领导人选举的问题。 领导者选举是解决以下问题的一种常见方法&#xff1a;在分布式系统中&#xff0c;只…