lombok 生成代码_使用Project Lombok减少Java应用程序中的样板代码

lombok 生成代码

对Java编程语言最常提出的批评之一是它需要大量的样板代码 。 对于简单的类尤其如此,该类只需要存储一些值就可以。 您需要这些值的getter和setter方法,也许您还需要一个构造函数,覆盖equals()和
hashcode()通常是必需的,也许您想要一个更有用的toString()实现。 最后,您可能有100行代码,可以用10行Scala或Groovy代码重写。 诸如Eclipse或IntelliJ的Java IDE试图通过提供各种类型的代码生成功能来减少此问题。 但是,即使不必自己编写代码,如果在IDE中打开这样的文件,也总是会看到它(并被它分散注意力)。


Lombok项目 (不要被丑陋的网页所吓倒)是一个小的Java库,可以帮助减少Java应用程序中的样板代码量。 Lombok项目提供了一组注释,这些注释在开发时会进行处理,以将代码注入Java应用程序。 注入的代码可立即在您的开发环境中使用。

让我们看一下下面的Eclipse屏幕截图:

Lombok简介
定义的类使用Lombok的@Data注释进行注释,并且最多包含三个私有字段。 @Data自动注入getter,setter(用于非final字段),equals(),hashCode(),toString()和用于初始化final dateBirth字段的构造函数。 如您所见,生成的方法可直接在Eclipse中使用,并显示在Outline视图中。

建立

要为您的应用程序设置Lombok,必须将lombok.jar放入类路径。 如果您使用的是Maven,则只需将以下依赖项添加到pom.xml中:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.14.6</version><scope>provided</scope>
</dependency>

您还需要在使用的IDE中设置Lombok:

  • NetBeans用户只需在其项目属性中启用“在编辑器中启用注释处理”选项即可(请参阅: NetBeans说明 )。
  • Eclipse用户可以通过双击lombok.jar并遵循快速安装向导来安装Lombok。
  • 对于IntelliJ,可以使用Lombok插件 。

入门

简介中显示的@Data注释实际上是其他各种Lombok注释的快捷方式。 有时@Data做得太多。 在这种情况下,您可以使用更具体的Lombok注释,从而为您提供更大的灵活性。

使用@Getter和@Setter可以仅生成getter和setter:

@Getter
@Setter
public class Person {private final LocalDate birthday;private String firstName;private String lastName;public Person(LocalDate birthday) {this.birthday = birthday;}
}

请注意,布尔字段的getter方法以is代替get的前缀(例如isFoo()代替getFoo())。 如果只想为特定字段生成getter和setter,则可以注释这些字段而不是类。

生成equals(),hashCode()和toString():

@EqualsAndHashCode
@ToString
public class Person {...
}

@EqualsAndHashCode和@ToString也具有各种可用于自定义其行为的属性:

@EqualsAndHashCode(exclude = {"firstName"})
@ToString(callSuper = true, of = {"firstName", "lastName"})
public class Person {... 
}

在此,equals()和hashCode()不会考虑firstName字段。 toString()将首先调用super.toString(),并且仅考虑firstName和lastName。

对于生成构造函数,可以使用多个注释:

  • @NoArgsConstructor生成不带参数的构造函数(默认构造函数)。
  • @RequiredArgsConstructor为所有未初始化的最终字段生成一个带有一个参数的构造函数。
  • @AllArgsConstructor为类中的所有字段生成一个带有一个参数的构造函数。

@Data批注实际上是@ ToString,@ EqualsAndHashCode,@ Getter,@ Setter和@RequiredArgsConstructor的常用快捷方式。

如果您喜欢不可变的类,则可以使用@Value代替@Data:

@Value
public class Person {LocalDate birthday;String firstName;String lastName;
}

@Value是@ ToString,@ EqualsAndHashCode,@ AllArgsConstructor,@ FieldDefaults(makeFinal = true,level = AccessLevel.PRIVATE)和@Getter的快捷方式。

因此,使用@Value可以获取toString(),equals(),hashCode(),getter和具有每个字段一个参数的构造函数。 默认情况下,它也将所有字段设置为私有和最终,因此您不必添加私有或最终修饰符。

看Lombok的实验功能

除了到目前为止显示的受支持的注释之外,Lombok还具有一些实验功能,可以在“ 实验功能”页面上找到它们。

我特别喜欢的这些功能之一是@Builder批注,它提供了Builder模式的实现。

@Builder
public class Person {private final LocalDate birthday;private String firstName;private String lastName;
}

@Builder生成一个静态builder()方法,该方法返回一个生成器实例。 此构建器实例可用于构建带有@Builder注释的类的对象(此处为Person):

Person p = Person.builder().birthday(LocalDate.of(1980, 10, 5)).firstName("John").lastName("Smith").build();

顺便说一句,如果您想知道LocalDate类是什么,就应该看看我有关Java 8日期和时间API的博客文章!

结论

Lombok计划基于注释注入生成的方法,例如getter和setter。 它提供了一种简便的方法,可以大大减少Java应用程序中的样板代码。

请注意,这样做有一个弊端:根据reddit评论 (包括项目作者的评论),Lombok必须依靠各种黑客手段才能完成工作。 因此,未来的JDK或IDE版本可能会破坏Lombok项目的功能。 另一方面,这些评论是5年前发表的,而Lombok计划仍在积极维护。

  • 您可以在GitHub上找到Project Lombok的源代码。

翻译自: https://www.javacodegeeks.com/2014/09/reduce-boilerplate-code-in-your-java-applications-with-project-lombok.html

lombok 生成代码

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

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

相关文章

让C/C++程序员告诉你什么叫浪漫,表白黑科技,炫酷多彩求爱利器

前言缘是美丽的邂逅&#xff0c;爱是心跳的感觉&#xff0c;情是心灵的交会&#xff0c;恋是甜蜜的思念&#xff0c;走在爱与被爱的边缘&#xff0c;你见或者不见&#xff0c;爱你的心始终不改变&#xff01;C语言诠释爱——为TA写下心中情&#xff0c;生成程序传给TA&#xff…

Java十六进制浮点文字

我如何遇到十六进制浮点数 我正在Java :: Geci中开发一种新功能&#xff0c;以减少代码重新格式化的可能性。 如果重新格式化&#xff0c;当前版本的代码将覆盖原本相同的代码。 这很烦人&#xff0c;因为按下重新格式化键的快捷键相当容易&#xff0c;而且许多项目甚至要求开发…

C语言对电脑做的事儿啊,总有那么一丝恐怖,C语言操盘电脑两例

C语言对自己电脑做的事儿啊&#xff0c;总有那么一丝恐怖&#xff0c;C语言与电脑两例开场先抱歉&#xff0c;偷懒好多天了。今天分享给大家的l两例比较短小精悍&#xff0c;都是针对于计算机屏幕处理的两例&#xff0c;有兴趣的可以放到自己电脑上运行哦。绝对无害&#xff0c…

servlets_jQuery Ajax – Servlets集成:构建完整的应用程序

servlets网上有很多教程&#xff0c;它们解释了有关使用servlet和JSP页面进行Java Web开发的一些知识&#xff0c;但是&#xff0c;我从未找到对于初学者来说足够简洁的教程。 这样的教程应该解释创建一个简单的Web应用程序的整个过程&#xff0c;包括前端&#xff0c;后端&…

mysql分库分表的缺点_MySQL分库分表会带来哪些问题?

分库分表能有效的环节单机和单库带来的性能瓶颈和压力&#xff0c;突破网络IO、硬件资源、连接数的瓶颈&#xff0c;同时也带来了一些问题。下面将描述这些技术挑战以及对应的解决思路。1、事务一致性问题分布式事务当更新内容同时分布在不同库中&#xff0c;不可避免会带来跨库…

C语言的恶趣味,胆小者莫入,以免入门到放弃,C语言夺命题十例!

前言这些问题测试了C语言的高级知识&#xff0c;包括一些很少使用的特性。有效的C编程需要对诸如未定义的行为&#xff0c;递归和指针算术等概念有深入的理解&#xff0c;但是这些故意复杂的例子并不代表现实世界的代码&#xff0c;当然也不会为了清晰和可维护性而获得任何奖励…

java学习里程碑_记录您的里程和社区运行情况:Java EE 7真实体验

java学习里程碑miles2run.org是跟踪跑步活动并与亲朋好友共享的简便方法。 可以创建然后跟踪基于天或基于距离的目标。 它还允许创建社区运行目标&#xff0c;并使多个跑步者参与并跟踪他们朝着该目标的活动。 您还可以找出本地跑步者并与他们联系。 该项目已开始&#xff0c;…

遇C语言条件编译就犯怵,不知什么意思,c语言头文件中的宏定义

前言看见头文件中的条件编译就犯怵&#xff0c;不知什么意思&#xff0c;但是&#xff0c;你老师说&#xff1a;”就得那么写“&#xff0c;你照做&#xff0c;但是知其然而不知其所以然。今天分享下是自己的理解~~~纯属个人献丑&#xff0c;新手可阅&#xff0c;老鸟绕道。代码…

pcie3.0一条通道带宽_小技巧|内存双通道提升性能

今天给大家分享一个小技巧&#xff0c;如果你的电脑有两条或以上的内存条&#xff0c;不同的内存插法也是会影响性能的哦&#xff0c;也就是内存双通道。什么是双通道&#xff1f;双通道内存说白了是两条内存由串联方式改良为并联方式&#xff0c;以得到更大的内存带宽&#xf…

C++简介源码讲解精辟版,C++入门级C++学习,C++与C的区别值得知晓

C简介源码讲解精辟版,C入门级C学习&#xff0c;C与C的区别值得知晓C语言和C基础区别C标准输入和输出命名空1.命名空间的定义 &#xff1a;namespace 标识符{ } 例&#xff1a;namespace my{int a1;}命名空间中的成员访问&#xff1a;作用域分辨符&#xff1a;&#xff1a; 例&a…

jbpm 和 drools_Drools和jBPM KIE A​​pps平台

jbpm 和 drools随着Drools和jBPM&#xff08;KIE&#xff09;6系列出现了一个新的工作台&#xff0c;并有望最终实现用户的可扩展性。 我终于有了一些预告片&#xff0c;以显示此工作原理以及所存储的内容。 确保选择1080p并全屏显示它们的最佳状态。 &#xff08;点击放大&am…

mysql 1308_Mysql恢复数据报ERROR 1308 : LEAVE with no matching label_MySQL

赶紧看备份日志&#xff0c;日志如下&#xff1a;----------------------------------BEG:20151108 01:00:01FTP:20151108 01:00:05CLS:20151108 01:00:07OPT:20151108 01:00:08END:20151108 01:00:08----------------------------------日志并没有什么异常&#xff0c;既然说有…

真正的C与C++编程高手是什么?臭美的群体!如何编写高质量代码?

前 言软件质量是被大多数程序员挂在嘴上而不是放在心上的东西&#xff01;除了完全外行和真正的编程高手外&#xff0c;初读本书&#xff0c;你最先的感受将是惊慌&#xff1a;“哇&#xff01;我以前捏造的C/C程序怎么会有那么多的毛病&#xff1f;”别难过&#xff0c;作者只…

windows10安装mysql 8.0_手把手教你在Windows 10安装MySQL 8.0(详细图文)

出品丨TeacherWhat题图&#xff1a;Oracle MySQL 8.0关键字&#xff1a;新版本、Install、安装、MySQL、数据库入门、Database正文约1000字&#xff0c;建议阅读时间2分钟目录结构&#xff1a;1. 官网下载安装包2. 点击下载的程序包安装3. 安装数据库软件4. 安装成功后&#xf…

mysql降低数据库版本_三步10分钟搞定数据库版本的降迁 (将后台数据库SQL2008R2降为SQ...

三步10分钟搞定数据库版本的降迁 (将SQL2008R2降为SQL2005版本) 前思后想仍觉得实战数据库版本的降迁一文中的方式不仅老土而且低效&#xff0c;故有了下文三步搞定数据库从MSSQL2008R2 高版本降迁至SQL2005低版本。 整个过程如果思路清晰&#xff0c;数据量小&#xff0c;不过…

2017菜鸡C与C++工程师总结,撸码撸码,垃圾专科生撸码人生

前言年底了&#xff0c;对工作做一个总结。又要感叹那句话啊&#xff0c;时光流水&#xff0c;仿佛昨天才刚毕业&#xff0c;到今天不知不觉已经正式工作半年了。文章以po主自己的心理想法和所见所闻入手来写&#xff0c;垃圾专科生&#xff0c;文笔不好勿怪。开始正文吧。关于…

primefaces_PrimeFaces 5.0 DataTable列切换器

primefaces我有机会与PrimeFaces 5.0 DataTable一起工作&#xff0c;并且增强功能很棒。 今天&#xff0c;我只想展示其中的一项新功能……DataTable列切换器。 通过此功能&#xff0c;可以通过复选框列表选择显示哪些列。 要使用列切换器&#xff0c;只需添加一个commandButt…

Docker化Spring Boot应用程序

你好朋友&#xff0c; 在本教程中&#xff0c;我们将看到如何对Spring Boot应用程序进行Docker化。通过dockerizing意味着我们将以Docker容器的形式运行应用程序。 以下是涉及的步骤&#xff1a; 1.创建一个Spring Boot应用程序 2.在您的机器上安装Docker 3.在您的项目中创…

抱歉咯!今天偷个懒!!

今天偷个懒向大家推荐一个新建的C/C学习交流群。应为新建群人数不是很多&#xff0c;正在学习C/C或者正在寻求进阶的小伙伴都可以加下。作为群主会不时在群内分享学习资料的。

openshift_在WildFly和OpenShift上的WebSocket聊天

openshift聊天是解释WebSocket的最典型示例之一。 它是一个相当常用的界面&#xff0c;可以很容易地解释WebSocket的基本概念。 当然&#xff0c;Java EE 7 WebSocket也有一个&#xff0c; 在这里可用 &#xff01; 您可以使用以下步骤在WildFly上轻松运行它&#xff1a; curl…