Lombok,一种编译时Java注释预处理器,可最大程度地减少代码大小
在本文中,我们将看到如何在常规Java代码中使用lombok来最小化代码长度和冗余。
什么是Lombok?
Lombok,一个编译时注释预处理器,有助于在编译时注入一些代码。 在详细介绍之前,我要求您应该从他们的网站上观看视频。 我不会像这样进行现场演示,但是我将展示如何在项目内部使用它(包括Maven生命周期)。
让我们从基本的了解开始。 如我所知,lombok是一个编译时注释预处理器。 那是什么意思
->它将在编译时起作用(我们可以在编写代码时看到效果)
->在编译过程中(使用javac命令执行)我们需要类路径中的依赖项
->我们需要插件支持才能在编码时看到IDE的效果。(因为IDE在编码/保存过程中会进行编译)
Lombok有几个实用程序/功能。 我们将介绍到目前为止我使用过的主要项目。
注意:要了解批注,您可能会看到我的这篇文章。
安装方式:
Eclipse:从此链接下载并安装(您需要显示eclipse安装目录)
(我已经检查了STS / eclipse版本:3.7.3.RELEASE)
Intellij IDEA:只需安装lombok插件。 (文件->设置->插件->搜索/浏览以查看,然后安装)
或: 插件链接
现在:基于IDE行为,您可能需要启用注释预处理器才能使插件正常工作。 (通常现代IDE具有此默认设置)
从Eclipse:
IntelliJ IDEA:
项目设置:
我将使用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变得麻木。 它还支持访问级别参数,以定义getter和setter的范围。
参数:采用枚举参数AccessLevel
PUBLIC =可公开访问
MODULE,PACKAGE =与默认值相同(不使用任何修饰符) 受保护=与受保护相同 私人=与私人相同 NONE =不会执行
在课堂上:
覆盖类级别的getter: @ToString:这是toString()的实现,我们只能用于类级别。
参数:
includeFieldNames():布尔类型=>定义所有字段包含
callSuper():布尔类型=>调用super
doNotUseGetters():布尔类型=>避免使用字段的获取器。 exclude():字段名称的字符串数组=>定义字段排除 of():字段名称的字符串数组=>定义要添加的字段(显式)
@Data:它是多个注释的组合。
哪里:我们可以在类/类型之前使用
参数:
注意:数据包括
1. @Getter,
2. @Setter。 3. @RequiredArgsConstructor 4. @Tostring 5. @EqualsAndHashCode
范例:
蚀:
IntelliJ:
@Value:这只是@Data的不可变值类型。
参数:staticConstructor条目将默认构造函数设为私有
@Builder:向您的班级添加默认的构建器类。 它只是一个构建器(如构建器模式,带有参数,请参见图像中的示例)
@Singular:用于通知集合(仅支持guava和Java util)。 它包括2种加法器方法,一次添加,全部添加。
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());}}
}
@NotNull:这将对变量添加null检查,并引发null指针异常。
使用范围:方法,参数,局部变量
无需检查
与@NotNull
@EqualsAndHashCode:它简单地将equals(Object other)和hashCode()添加到类中。 (因此它是类级别的注释)。
它支持参数以自定义那些equals和哈希码方法。 所有参数均与@ToString相同。
@Cleanup:这是清理资源的简单方法。 实际上,它确保资源try()方法将在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文件,以了解依赖关系以及配置文件的资源。
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,一种编译时Java注释预处理器,可最大程度地减少代码大小相关推荐
- 手动编译 lombok_Lombok,一种编译时Java注释预处理器,可最大程度地减少代码大小...
手动编译 lombok 在本文中,我们将看到如何在常规Java代码中使用lombok来最大程度地减少代码长度和冗余. 什么是Lombok? Lombok,一个编译时注释预处理器,有助于在编译时注入一些 ...
- java使用cmd编译中文时错误,解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题...
解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 在刚开始学习Java的过程中,考虑到记事本应用没 ...
- java中常见的编译错误的是_编译时JAVA最常见的错误有哪些
如果你正学习Java语言,你在编译和执行代码的时候遇到问题,一般来说问题将分为2类:无论你遇到的是编译时错误,这说明你的程序编译失败,还是你遇到运行时错误,这是指错误发生在你成功地编译了程序但不能运行 ...
- java编译异常有哪些_编译时JAVA最常见的错误有哪些
如果你正学习Java语言,你在编译和执行代码的时候遇到问题,一般来说问题将分为2类:无论你遇到的是编译时错误,这说明你的程序编译失败,还是你遇到运行时错误,这是指错误发生在你成功地编译了程序但不能运行 ...
- 【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )
文章目录 一.编译时注解和注解处理器 二.创建 编译时注解 和 注解处理器 三.添加 编译时注解 和 注解处理器 依赖库依赖 四.博客资源 一.编译时注解和注解处理器 上一篇博客 [Android A ...
- java编译时注解_Java注解处理器--编译时处理的注解
1. 一些基本概念 在开始之前,我们需要声明一件重要的事情是:我们不是在讨论在运行时通过反射机制运行处理的注解,而是在讨论在编译时处理的注解. 注解处理器是 javac 自带的一个工具,用来在编译时期 ...
- Myeclipse学习总结(14)——Eclipse/MyEclipse中Java编译时Java反射机形参没有保留问题2种解决方案
一.IDE Compiler设置解决 Window -> Preferences -> Java -> Compiler. 选中Store information about met ...
- maven编译时java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException: 9480 at org.codehaus.plexus.util.xml.pull.MXParser.parsePI ...
- 蜘蛛纸牌java注释_自己摸索的纸牌游戏代码,感觉还有很多知识不懂,任重道远啊!...
package com.poker; /* * 定义一个纸牌的实体类 */ public class Poker implements Comparable{ String color ;//定义花色 ...
最新文章
- Google 在印度建立 AI 实验室,致力于农业、医疗、教育
- [Java学习]Striing StringBuffer StringBuilder 的比
- 【javascript】解决setTimeout不能传参的问题
- 正则表达式 语言间通用
- editActionsForRowAtIndexPath(iOS8) tableview编辑(删除、插入、移动)
- jzoj6274-[NOIP提高组模拟1]梦境【贪心,堆】
- HTML期末作业-美食点餐网页
- ESLint使用文档
- docker 虚拟化_如果没有虚拟化,Docker将提供什么?
- centos标准分区调整大小_磁盘怎么调整分区大小 磁盘调整分区大小教程【详细步骤】...
- 【舆情监控】社会化大数据应用平台TOOM舆情监测系统
- 为心爱的人做一个超具创意的表白网页吧❤(告白气球)HTML+CSS+JavaScript
- ensp 华为路由器配置远程登陆(telnet,ssh)
- DB2新建用户及数据库过程
- win10清理c盘_系统慢?给你的C盘减减肥!
- 变压器励磁模型 Matlab/simulink 可用于模拟电压暂降等电能质量问题
- 微信推文转发服务器,微信文章如何转载?(看好这4个方法,可转发任何内容)...
- MATLAB 在图中插入注释性文字
- 数据结构二叉排序树的查找
- Verilog设计(二):分频电路设计
热门文章
- 《走遍中国》珍藏版(六)
- struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Emp实体类和对应的配置信息
- 判断一个男人穷还是富,只看这几点!
- ps查看所有php进程,ps命令就是最基本进程查看命令
- 自动部署 管道 ci cd_自动化测试在CI CD管道中的作用
- switch字符串jdk_JDK 12 Early Access Build 12中的原始字符串文字支持
- libreoffice_利用Excel或LibreOffice的业务输入进行单元测试约束
- openwrt固定速率_固定速率与固定延迟– RxJava常见问题解答
- Hibernate架构概述
- 注释嵌套注释_DIY注释