Lombok–您绝对应该尝试一下

Lombok在Java生态系统中并不是什么新鲜事物,但是我必须承认,直到我尝试使用它或被“确信”尝试它之前,我总是低估了它的价值。 我发现添加一个库来生成代码的价值并不高,这些库可以被当今的任何现代IDE轻松生成。 因此,我忽略了该库,并且一直在编写或生成大量样板代码。 不再。 2016年,我加入了一个基于Spring的项目,其中Lombok项目已经到位。 从那时起,我就再也没有Lombok了……为什么?

那么,Lombok到底是什么?

简而言之,Lombok是一个Java库,通过插入IDE和构建工具可以为开发人员生成大量代码。 例如, [@Data](https://projectlombok.org/features/Data)向POJO添加getterssettersequalshashCodetoString方法之外,还可以使用单个[@Data](https://projectlombok.org/features/Data)注释。

诸如Gradle或Maven之类的构建工具支持不会带来问题

Lombok与Gradle毫无问题。 您在Lombok上添加了compileOnly依赖关系,基本上就是这样:

compileOnly ("org.projectlombok:lombok:${lombokVersion}")

尽管我主要处理与Spring相关的项目,而且最近它们都基于Gradle,但我也没有遇到过Maven的任何问题。

IntelliJ支持足够好

我每天都在与IntelliJ合作,它对Lombok的支持效果很好。 第三方插件支持Lombok: https : //github.com/mplushnikov/lombok-intellij-plugin 。

插件的配置非常简单:您需要为项目启用Lombok插件和注释处理。 当然,Lombok必须在类路径中。 配置项目后,您可以开始导入Lombok批注,并立即在源代码中开始使用它们。

我没有注意到IntelliJ中代码完成的问题。 我没有发现任何延迟或功能缺失。 当我想为生成的方法显示代码定义时,它向我显示了Lombok批注-很好-尽管可以看到生成的代码,但会很好。

不利的一面是,有时会发生代码无法立即使用的情况,因此需要执行手动编译。 就我而言,这真的很少见。

启用Lombok后,无法直接从代码编辑器访问某些功能。 例如,使用@Builder批注时,会生成许多代码,包括builder类。 要查找某些构建器方法的用法,您需要从“ 结构”视图中执行此操作。

在生成的代码中无法按名称导航到符号,但这似乎不是问题:使用Lombok时,您知道生成的代码与某些类相关。 例如, UserBuilderUser类相关,因此您可以跳到User中查看其构建器(如果确实需要)。

总而言之,在IntelliJ上,每天都没有显示停止器。

阅读代码更容易

使用Lombok的主要优点之一是所需读取的代码更少。 这在代码审查期间非常有用–我打开类,然后立即查看它是否是@Value @Data类或@Value对象(如果它提供了@Builder等)。尽管Lombok在源代码中需要更多注释(Lombok批注,JPA批注,Jackson批注,Spring批注...),它仍然使代码更简洁,更易于阅读/查看。

Lombok使(一些)团队实践标准化

例如,在我开始使用Lombok之前,在每个项目中都有几种创建构建器的方法。 使用Lombok可以更轻松地维护这些做法( @Builder@Singularity )。

Lombok与其他库配合良好

我没有遇到JPA或Jakson注释与Lombok注释混合的问题。 不过,我过去曾听说过有关MapStruct和Lombok的问题,但现在似乎已解决:( https://github.com/mapstruct/mapstruct/issues/510 )

Lombok批注可以轻松地与Spring组件一起使用,因此创建时所需的代码更少。 例如@AllArgsConstructor可用于注入bean的依赖项,因为Spring不需要使用@Autowire注释构造函数:

@Service
@RequiredArgsContructor
class SomeService {private final Dep1 dep1;private final Dep2 dep2;
}

值得注意的是,Spring Boot Initializer( http://start.spring.io/ )在生成的项目文件中提供了Lombok依赖性(要添加到新项目的核心依赖性之一)。

考虑将Lombok用于您的下一个项目

Lombok是一个很棒的库,可以加快开发速度,使代码更简洁,更易于阅读和维护。 Lombok似乎足够成熟,可以尝试一下。 即使您决定仅将其用于简单案例,也可以为您的项目带来很多价值。 信不信由你,但是直到我尝试了几个星期,我对Lombok都非常怀疑。

翻译自: https://www.javacodegeeks.com/2017/09/lombok-definitely-give-try.html

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

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

相关文章

苹果手机透明桌面_原来苹果手机辨别真假这么简单!查看桌面1个图标,就能轻松分辨...

要说哪个品牌的手机贵,大家想到的肯定是苹果手机啦,所以说很多朋友都害怕自己买到假货。其实分辨苹果手机是不是正品很简单,只需学会这两个方法,就能辨别出手机的真假哦。一、从细节入手1.桌面时钟不知道大家发现没,iP…

NOIP模拟测试34「次芝麻·呵呵呵·长寿花」

次芝麻 题解 大力打表,发现快速幂, 例如初始$5$ $6$,那么第一次就是$5*2\%1110$,$6*2\%111$. 代码 #include<bits/stdc.h> using namespace std; #define ll long long ll n,m,k,d; ll g(ll x,ll k,ll s1){for(;k;k>>1,xx*x%d)if(k&1) ss*x%d;return s; } int …

Java Bean验证基础

这篇文章总结了一些简单易用的示例&#xff0c;这些示例说明了您想使用Java Beans Validation API&#xff08;JSR 349&#xff0c;JSR 303&#xff09;进行的最常见操作。 记住&#xff0c;Beans Validation独立于Java EE。 尽管它是作为Java EE兼容服务器的一部分内置的&…

NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」

简单的区间 $update$ 终于$AC$了 找到$(sum[r]sum[l](sum表示以中间点为基准的sum)-mx)\%k0$的点 注意这里$sum$表示是以$mid$为基准点,(即$sum[l]$为后缀和,$sum[r]$为前缀和) 回忆$(sum[r]-sum[l])\%k0$这个经典问题做法(入阵曲简化版),开桶,桶里维护$sum[l]\%k$,那么$r$贡献…

苹果手机变卡了怎么解决_iOS 变卡怎么解决?一招搞定!无需刷机

iOSiOS 因为其优秀的底层交互逻辑&#xff0c;能让一部 iPhone 在不跨版本更新系统的前提下&#xff0c;至少保证 2 年内如新机般流畅。两年之后呢&#xff1f;你是否为手中的老将渐衰而苦恼过&#xff1f;本人对手机的流畅度十分敏感&#xff0c;可以说到了极致。付款时&#…

NOIP模拟测试38「金·斯诺·赤」

金 辗转相减见祖宗 高精 #include<bits/stdc.h> using namespace std; #define A 2000 #define P 1 #define N 10 #define ll long long ll n,T; char sjdfj[A]; struct bignum {ll n[A],l;bignum(){l1,memset(n,0,sizeof(n));}void clear(){while(l>1&&!n[l-…

什么是JSON处理(JSON-P API)?

Java EE中的JSON-P简介 JSON处理1.0&#xff08; JSR 353 &#xff09;的Java API是一个低级&#xff0c;轻量级的JSON解析器和生成器&#xff0c;它提供了在属性和值级别上操作JSON数据的能力。 JSR 353提供了两种JSON处理模型&#xff1a; 对象模型和流模型。 两种模型都可以…

电视机原理图_电工电气,如何看电气原理图和接线图,如何设计图纸?

电气图纸一般可分为两大类&#xff0c;一类为电力电气图&#xff0c;它主要是表述电能的传输、分配和转换&#xff0c;如电网电气图、电厂电气控制图等。另一类为电子电气图&#xff0c;它主要表述电子信息的传递、处理&#xff1b;如电视机电气原理图。本文主要谈电力电气图的…

NOIP模拟测试39,思维禁锢专场「工业题·玄学题·卡常题」

工业题 题解 抱歉,题解没时间写了 代码 #include<bits/stdc.h> using namespace std; #define ll long long #define A 6666666 #define mod 998244353 ll jie[A],ni[A],acnt[A],bcnt[A]; ll fheng[A],fshu[A]; ll n,m,a,b; ll meng(ll x,ll k){ll ans1;for(;k;k>>…

ubuntu 如何登录远程服务器_VSCode远程登录云服务器、树莓派实现在线调试代码...

在PyCon2019大会上&#xff0c;微软发布了VSCode Remote&#xff0c;开启了远程开发的新时代&#xff01;Remote可以帮助开发者在容器、物理机器或虚拟机&#xff0c;以及WSL上实现无缝的远程开发。通过安装Remote Development Extension Pack&#xff0c;开发者可以快速上手远…

macosx jdk_MacOSX环境上的多个Java JDK

macosx jdk同样&#xff0c;这是在Mac&#xff08;OSX 10.8.x &#xff09;上配置Java开发环境的一个小技巧。 如果您现在真的开始&#xff0c;我建议您阅读我以前的文章之一 &#xff0c;这是一种快速干净的方法&#xff08;我想&#xff09;来设置环境变量并开始Java编码。 今…

屏幕方向读取与锁定:Screen Orientation API(转)

什么是 Screen Orientation API Screen Orientation API 为 Web 应用提供了读取设备当前屏幕方向、旋转角度、锁定旋转方向、获取方向改变事件的能力。使得特定应用在屏幕方向方面增强用户体验&#xff0c;如视频和游戏。该标准目前处于工作组草案状态&#xff0c;最近一个修改…

scenebuilder各控件属性介绍_Flutter 全栈式——基础控件

在Flutter中&#xff0c;UI小控件有两种设计风格&#xff0c;一种是Material设计&#xff0c;这是安卓的官方设计风格&#xff0c;另一种则是Cupertino风格&#xff0c;是iOS的官方设计风格。因此&#xff0c;当遇到带有这两个单词开头的控件时&#xff0c;我们应该明确他们表达…

正义联盟的Spring靴

正义联盟的黑暗时代已经来临&#xff0c;强大的Darkseid即将征服人类。 蝙蝠侠在《神力女超人》的帮助下&#xff0c;努力使联盟与一个关键方面失联。 适当的正义联盟成员管理系统。 由于时间不在他们身边&#xff0c;他们不想经历繁琐的过程&#xff0c;从头开始用他们需要的所…

Fetch

fetch是一种HTTP数据请求的方式&#xff0c;是XMLHttpRequest的一种替代方案。fetch不是ajax的进一步封装&#xff0c;而是原生js。Fetch函数就是原生js&#xff0c;没有使用XMLHttpRequest对象。 ajax 使用步骤1.创建XmlHttpRequest对象2.调用open方法设置基本请求信息3.设置发…

boost安装_Centos安装MySQL

安装MySQLMySQL 各版本介绍视频观看:https://www.bilibili.com/video/BV1ap4y1i75jMySQL 官网:https://www.mysql.com/cn/MySQL Community Server社区版本&#xff0c;开源免费&#xff0c;但不提供官方技术支持。MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xf…

选择Java加密算法第3部分–公钥/私钥非对称加密

抽象 这是涵盖Java加密算法的三部分博客系列的第3部分。 本系列介绍如何实现以下目标&#xff1a; 使用SHA–512散列 使用AES–256的单密钥对称加密 RSA–4096 这第三篇文章详细介绍了如何实现非对称的RSA-4096公/私钥加密。 让我们开始吧。 免责声明 这篇文章仅供参考。 …

Error: Cannot find module '@babel/core'

官方默认babel-loader需要搭配最新版本babel 更新到最高版本: npm install -D babel-loader babel/core babel/preset-env webpack 转载于:https://www.cnblogs.com/nocry/p/11493363.html

javabeans_膨胀的JavaBeans –不要在您的API中添加“ Getters”

javabeans我已经最近在博客的想法的JavaBeans™如何可以扩展以减少在Java世界中&#xff0c;这被广泛接受的公约设立的膨胀。 该文章在DZone上重新发布&#xff0c;并在这里获得了颇具争议的反馈&#xff08;例如&#xff0c;大多数试图将一些新想法带入Java世界的想法&#xf…

uniapp 子组件 props拿不到数据_来吧!一文彻底搞定Vue组件!

点击蓝色 “达达前端小酒馆” 关注我哦!加个 “星标” &#xff0c;每天一篇文章&#xff0c;一起学编程作者 | Jeskson来源 | 达达前端小酒馆Vue组件的概述组件是什么呢&#xff0c;了解组件对象的分析&#xff0c;Vue组件中的data属性&#xff0c;props传递数据的原理到底是…