lombok 生成代码

对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模式的实现。

@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 生成代码

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

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

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

  2. python点名代码_基于python tkinter的点名小程序功能的实例代码

    基于python tkinter的点名小程序功能的实例代码,花名册,次数,窗口,未找到,初始化 基于python tkinter的点名小程序功能的实例代码 易采站长站,站长之家为您整理了基于pytho ...

  3. 有趣的java代码_求一些有趣的java小程序?

    不请自来,用eclipse写的一个输出爱心的小程序,应该算是比较有趣的吧 下面是程序内容------------------------------------ public class love { ...

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

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

  5. android 检测广告代码,Admob测试广告未在Android应用程序中显示(示例代码)

    正如标题所述,我正在尝试将admob广告应用到我的应用程序中,但是当我使用测试广告时,他们没有显示. 启动画面活动: base.OnCreate(savedInstanceState); //Ensu ...

  6. java程序中用户名和密码_在Java应用程序中使用密码术

    java程序中用户名和密码 这篇文章描述了如何使用Java密码体系结构 (JCA),该体系结构使您可以在应用程序中使用密码服务. Java密码体系结构服务 JCA提供了许多加密服务,例如消息摘要和签名 ...

  7. npm包管理机制引质疑:又一安装程序中发现恶意代码,开发者账户频遭劫持

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI npm行不行,包管理机制行不行? 最新的一次npm包被篡改事件,让开发者的这两个疑问更加强烈了. 最新中枪的是纯函数式编程语言Purescr ...

  8. java窗体中添加图片_在java窗体程序中添加图片的方法

    在java窗体程序中添加图片的方法 发布时间:2020-06-16 11:24:13 来源:亿速云 阅读:148 作者:Leah 这篇文章主要为大家详细介绍了在java窗体程序中添加图片的方法,图文详 ...

  9. java电子日记本代码_计算法日记将规则的价值视为无需计算机的代码

    java电子日记本代码 I've been preparing a presentation for the Canadian Institute for the Administration of ...

最新文章

  1. 用python画雪花-python使用turtle库与random库绘制雪花
  2. CTFshow php特性 web128
  3. 谁能想到,我给技术总监“上了一课”?
  4. 【数据使用】3问视觉项目中的数据整理,这点小事你是不是都掌握好了?
  5. redis-cli报错:(error) MOVED 12706 (未以集群模式连接)
  6. 利用python脚本(re)抓取美空mm图片
  7. 送书 |《Python大数据与机器学习实战》
  8. 真人qq秀代码_波士顿动力Spot买家秀
  9. 认清性能问题,性能问题深入探究----性能之「道」
  10. 如何高效学习-《暗时间》读后感
  11. Oracle Data Guard官方说明
  12. Android UI线程
  13. CentOS 7静态IP在主机重启后失效解决
  14. Centos7下用命令下载jdk7及jboss-eap-6
  15. STM32的USART_GetFlagStatus和USART_GetITStatus解析
  16. 计算机及应用(独立本科段)B080702|学习考试顺序梳理 (专业名现更改为计算机科学与技术)
  17. 数据仓库、大数据平台、数据中台的区别
  18. 大数据技术 学习笔记
  19. java计算机毕业设计智慧物业管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  20. 木工雕刻机操作方法和步骤

热门文章

  1. hdu4965-Fast Matrix Calculation【矩阵乘法】
  2. 欢乐纪中A组周六赛【2019.4.13】
  3. ARC106——E - Medals
  4. 【DP】Bovine Genetics G(P7152)
  5. 【矩阵乘法】【倍增】美食家(luogu 6772)
  6. HDU5985 Lucky Conins 概率题
  7. Java IO: 流
  8. Java压缩技术(二) ZIP压缩——Java原生实现
  9. java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一)
  10. HashMap中傻傻分不清楚的那些概念