在本文中,我们将看到如何在常规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注释预处理器,可最大程度地减少代码大小相关推荐

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

    手动编译 lombok 在本文中,我们将看到如何在常规Java代码中使用lombok来最大程度地减少代码长度和冗余. 什么是Lombok? Lombok,一个编译时注释预处理器,有助于在编译时注入一些 ...

  2. java使用cmd编译中文时错误,解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题...

    解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 在刚开始学习Java的过程中,考虑到记事本应用没 ...

  3. java中常见的编译错误的是_编译时JAVA最常见的错误有哪些

    如果你正学习Java语言,你在编译和执行代码的时候遇到问题,一般来说问题将分为2类:无论你遇到的是编译时错误,这说明你的程序编译失败,还是你遇到运行时错误,这是指错误发生在你成功地编译了程序但不能运行 ...

  4. java编译异常有哪些_编译时JAVA最常见的错误有哪些

    如果你正学习Java语言,你在编译和执行代码的时候遇到问题,一般来说问题将分为2类:无论你遇到的是编译时错误,这说明你的程序编译失败,还是你遇到运行时错误,这是指错误发生在你成功地编译了程序但不能运行 ...

  5. 【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )

    文章目录 一.编译时注解和注解处理器 二.创建 编译时注解 和 注解处理器 三.添加 编译时注解 和 注解处理器 依赖库依赖 四.博客资源 一.编译时注解和注解处理器 上一篇博客 [Android A ...

  6. java编译时注解_Java注解处理器--编译时处理的注解

    1. 一些基本概念 在开始之前,我们需要声明一件重要的事情是:我们不是在讨论在运行时通过反射机制运行处理的注解,而是在讨论在编译时处理的注解. 注解处理器是 javac 自带的一个工具,用来在编译时期 ...

  7. Myeclipse学习总结(14)——Eclipse/MyEclipse中Java编译时Java反射机形参没有保留问题2种解决方案

    一.IDE Compiler设置解决 Window -> Preferences -> Java -> Compiler. 选中Store information about met ...

  8. maven编译时java.lang.ArrayIndexOutOfBoundsException

    java.lang.ArrayIndexOutOfBoundsException: 9480 at org.codehaus.plexus.util.xml.pull.MXParser.parsePI ...

  9. 蜘蛛纸牌java注释_自己摸索的纸牌游戏代码,感觉还有很多知识不懂,任重道远啊!...

    package com.poker; /* * 定义一个纸牌的实体类 */ public class Poker implements Comparable{ String color ;//定义花色 ...

最新文章

  1. Google 在印度建立 AI 实验室,致力于农业、医疗、教育
  2. [Java学习]Striing StringBuffer StringBuilder 的比
  3. 【javascript】解决setTimeout不能传参的问题
  4. 正则表达式 语言间通用
  5. editActionsForRowAtIndexPath(iOS8) tableview编辑(删除、插入、移动)
  6. jzoj6274-[NOIP提高组模拟1]梦境【贪心,堆】
  7. HTML期末作业-美食点餐网页
  8. ESLint使用文档
  9. docker 虚拟化_如果没有虚拟化,Docker将提供什么?
  10. centos标准分区调整大小_磁盘怎么调整分区大小 磁盘调整分区大小教程【详细步骤】...
  11. 【舆情监控】社会化大数据应用平台TOOM舆情监测系统
  12. 为心爱的人做一个超具创意的表白网页吧❤(告白气球)HTML+CSS+JavaScript
  13. ensp 华为路由器配置远程登陆(telnet,ssh)
  14. DB2新建用户及数据库过程
  15. win10清理c盘_系统慢?给你的C盘减减肥!
  16. 变压器励磁模型 Matlab/simulink 可用于模拟电压暂降等电能质量问题
  17. 微信推文转发服务器,微信文章如何转载?(看好这4个方法,可转发任何内容)...
  18. MATLAB 在图中插入注释性文字
  19. 数据结构二叉排序树的查找
  20. Verilog设计(二):分频电路设计

热门文章

  1. 《走遍中国》珍藏版(六)
  2. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Emp实体类和对应的配置信息
  3. 判断一个男人穷还是富,只看这几点!
  4. ps查看所有php进程,ps命令就是最基本进程查看命令
  5. 自动部署 管道 ci cd_自动化测试在CI CD管道中的作用
  6. switch字符串jdk_JDK 12 Early Access Build 12中的原始字符串文字支持
  7. libreoffice_利用Excel或LibreOffice的业务输入进行单元测试约束
  8. openwrt固定速率_固定速率与固定延迟– RxJava常见问题解答
  9. Hibernate架构概述
  10. 注释嵌套注释_DIY注释