手动编译 lombok

在本文中,我们将看到如何在常规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变得麻木。 它还支持访问级别参数,以定义获取器和设置器的范围。

参数:采用枚举参数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:这是清除资源的简单方法。 它实际上确保了资源的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文件以了解依赖关系以及配置文件的资源。

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

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

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

    在本文中,我们将看到如何在常规Java代码中使用lombok来最小化代码长度和冗余. 什么是Lombok? Lombok,一个编译时注释预处理器,有助于在编译时注入一些代码. 在详细介绍之前,我要求您 ...

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

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

  3. java的define,关于预处理器:Java中的#define

    我开始用Java编程,我想知道是否相当于C++ EDCOX1(0)的存在. 对谷歌的快速搜索表明它没有,但有人能告诉我是否存在类似的东西吗?在Java中?我正在努力使我的代码更可读. 例如,我希望能够 ...

  4. java无ide编译_[转]无IDE时编译和运行Java

    本文由 ImportNew - Grey 翻译自 dzone.欢迎加入Java小组.转载请参见文章末尾的要求. 最近Java subreddit出现了一篇"在没有IDE的情况下编译Java包 ...

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

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

  6. java aot,Java三种编译方式: 前端编译 JIT编译 AOT编译

    java程序代码需要编译后才能在虚拟机中运行,编译涉及到非常多的知识层面:编译原理.语言规范.虚拟机规范.本地机器码优化等:了解编译过程有利于了解整个Java运行机制,不仅可以使得我们编写出更优秀的代 ...

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

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

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

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

  9. java预编译啥意思_java预编译 java jdbc 预编译语句和普通语句的区别

    java中什么是预编译precompile?总有一天你恍然大悟,父母是你花心思,花时间最少,却最爱你的人. 什么是预编译?起什么作用的? . 在java中如何实现预编译?祝你幸福!这句话真俗.小编会祝 ...

最新文章

  1. Galaxy Project | 一些尝试与思考
  2. 4大案例分析金融机构的大数据应用
  3. FPGA基础知识极简教程(9)七段数码管显示的Verilog简单设计
  4. pytest使用简介
  5. PHP输出结构类型变量输出,php输出形式实例整理
  6. 处于计算机学科的基础地位,谈谈离散数学在计算机学科中的地位和作用(原稿)...
  7. php流程控制语句,php学习之道:php 流程控制语句
  8. RabbitMQ+PHP 教程六(RPC)
  9. Hibernate中使用Criteria查询及注解——(Dept.hbm.xml)
  10. 【iCore3 双核心板_ uC/OS-III】例程四:时间管理
  11. 一张图看懂华为2019年年报
  12. gatewayworker配置php,tp5整合GatewayWorker
  13. python mysql传入多个参数
  14. x战娘2服务器维护,x战娘2变态版攻略
  15. Flask框架学习:蓝图的使用
  16. 过拟合与欠拟合及解决方法
  17. JavaScript学习 第一周
  18. 引热议!多所高校明文规定:不再给部分全日制研究生安排宿舍
  19. JavaScript基础语法_JavaScript内置对象
  20. 20160411_使用老毛桃破解电脑密码

热门文章

  1. YBTOJ:魔法数字(数位dp)
  2. AT2667-[AGC017D]Game on Tree【SG函数】
  3. P2231-[HNOI2002]跳蚤【容斥】
  4. jzoj5365-[GDOI2018模拟9.14]通信【线段树合并】
  5. 【DP】【容斥】Nice to Meet You(AT3634)
  6. 【二分】Distinct
  7. 【开源组件】一份值得收藏的的 MySQL 规范
  8. MySQL数据库开发的 36 条军规
  9. 子类可以继承到父类上的注解吗
  10. 分享18道Java基础面试笔试题