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

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

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


定义的类使用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 Pattern的实现。

@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

使用Project Lombok减少Java应用程序中的样板代码相关推荐

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

    lombok 生成代码 对Java编程语言最常提出的批评之一是它需要大量的样板代码 . 对于简单的类尤其如此,该类只需要存储一些值就可以. 您需要这些值的getter和setter方法,也许您还需要一 ...

  2. 在 Java 应用程序中使用 Elasticsearch: 高性能 RESTful 搜索引擎和文档存储快速入门指南

    如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...

  3. elastic search java_在 Java 应用程序中使用 Elasticsearch

    如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...

  4. 在独立Java应用程序中使用Tomcat JDBC连接池

    这是从我们的客人文章W4G伙伴克拉伦斯豪的作者临春3从A按. 您可能会在文章结尾找到本书的折扣券代码,仅适用于Java Code Geeks的读者! 请享用! 在需要数据访问权限的独立Java应用程序 ...

  5. x-杂项-maven-repository-lombok-intro:使用PROJECT LOMBOK减少BOILERPLATE代码

    ylbtech-杂项-maven-repository-lombok-intro:使用PROJECT LOMBOK减少BOILERPLATE代码 1.返回顶部 1. REDUCING BOILERPL ...

  6. 如何在 Java 应用程序中设置 HicariCP 连接池

    在本教程中,我们将介绍 HikariCP 并展示如何在 Java 应用程序中设置 HicariCP 连接池.在我们的应用程序中,我们向 MySQL 数据库发出请求. HikariCP是可靠的高性能 J ...

  7. Java web程序中备份oracle数据库

    Java web程序中备份oracle数据库 1.生成备份文件: public ActionForward createDmp(ActionMapping mapping, ActionForm fo ...

  8. 网络研讨室_免费网络研讨会:Java应用程序中的吞咽异常

    网络研讨室 1月30日参加我们的网络研讨会,以发现Java应用程序中的"隐藏"异常. 如果一棵树落在森林中,但是没有写到原木上,它会发出声音吗? 答案是肯定的. 这些类型的错误可能 ...

  9. 免费网络研讨会:Java应用程序中的吞咽异常

    1月30日参加我们的网络研讨会,以发现Java应用程序中的"隐藏"异常. 如果一棵树落在森林中,但是没有写到原木上,它会发出声音吗? 答案是肯定的. 这些类型的错误可能会对用户体验 ...

最新文章

  1. LeetCode 547. Friend Circles--Python解法--笔试算法题
  2. php pdo 更新sql语句,增删改查sql语句及PDO数据库连接操作流程实例-2019年7月24日...
  3. Linux内存page,【原创】(十四)Linux内存管理之page fault处理
  4. txt如何单独单独选择一列_散列| 单独链接以解决冲突
  5. HDU-1027 组合数 STL-next_permutation
  6. java的简单算法题_[2]十道算法题【Java实现】
  7. 洛谷P1429 平面最近点对(加强版)
  8. PPA 软件源 ppa:ondrej/php 在哪里找到的
  9. 【Python】如何在Python项目中使用相对路径正确的导入模块/包
  10. Python算法学习教程
  11. Navicat 安装过程问题总结
  12. ROC曲线与PR曲线对比
  13. android炫彩跑马灯特效,盘点一下那些自带酷炫跑马灯效果的手机,最后一款几乎没人知道...
  14. 移动端网站优化需要具备哪些条件
  15. ORA-39194: Table mode jobs require the tables to be comma separated.
  16. LaTeX IEEE 模板 图片引用编号为大写罗马数字问题
  17. 英伟达发布《永劫无间》最新显卡驱动更新,驱动人生升级教程
  18. mac系统怎么给文件夹加密?mac文件夹加密教程
  19. 专访闪能申论凌青:学会申论应试五大力,轻松碾压对手
  20. 【附源码】计算机毕业设计java在线学习系统设计与实现

热门文章

  1. 法兰克服务器电源维修,发那科FANUC系统控制电源简介
  2. encipher.min.php,陌屿授权系统(5.7)最新版 网站授权 - 下载 - 搜珍网
  3. spingmvc 通过xml配置redis jedispol 有密码 通过xml配置redis中的 jedispool(有密码)
  4. 第8步 第2剑客 mybatis plugin 第三剑客 page helper csdn每天最多发多少文章 是20篇,刚刚才试了。2014
  5. php 向html追加元素,在PHP中存储兄弟元素的属性和内部HTML
  6. opencv立方体的画法_用opengl立方体的画法
  7. 如何不用 List.clear() 方法 就清空 list 中的 所有元素(中兴面试)
  8. 2021年最新springcloud配置中心不生效的版本原因
  9. POJ3904(BFS算法)
  10. 构建maven项目插件_如何构建一个Maven插件