摘要:使用,简化代码为了简化与,提供了一种机制,帮助我们自动生成这些样板代码。但是,在实际项目中,完全没有使用到。源码审查是一个源码审查工具。最新版已经支持的全部注解,不再认为是没有使用的变量。
一个典型的 Java 类
public class A { private int a; private String b; public int getA() { return a; } public String getB() { return b; } public void setA(int a) { this.a = a; } public void setB(String b) { this.b = b; } }
对于这样一个简单的 Java 类,我们通常需要给每个属性写getter和setter,而这种实际上没有什么太大的意义。当然,如果有的公司或团队使用代码行数评估工作量,还是多写几行吧;同时,可以考虑一下我们团队。
使用 lombok,简化代码为了简化getter与setter,lombok 提供了一种机制,帮助我们自动生成这些样板代码。以上的代码,如果使用lombok的话,将变得很简单:
@lombok.Getter @lombok.Setter public class A { private int a; private String b; }
顾名思义,lombok.Getter就是生成getter,lombok.Setter就是生成setter。但是,这样真的就可以了么?编译下,让我们看看生成的二进制代码。(请自行下载lombok.jar)
命令行> javac -cp lombok.jar A.java 命令行> javap -c A.class
输出结果略。可以看到完全一样。
更进一步,如果在编译的时候,加入-g:none选项,甚至可以看到生成的文件完全一样。
简单使用虽然我们可以在编译的时候,加入classpath,但是,一般来说,在各类IDE中使用,还是需要特殊处理一下。
Maven加上依赖就好。同时,由于lombok只在编译期才处理,所以并不需要在运行时有这个依赖,可以把scope定义为provided。
org.projectlombok lombok 1.16.8 provided
值得注意的是,maven的maven-compiler-plugin低版本和lombok高版本不兼容,目前已知maven-compiler-plugin的2.3.X与lombok的1.6.X不兼容。这个需要了解lombok的原理才能进一步说明。
Eclipse由于eclipse的默认编译器并不是javac,所以,需要额外安装,基本就是改下引导参数,可以直接运行jar包,或者手动在eclipse.ini里加上参数-Xbootclasspath/a:lombok.jar -javaagent:lombok.jar。
IDEA IntelliJ虽然IDEA IntelliJ默认使用javac作为编译器,理论上可以不装插件。可是,跳转等特性也随之没了。所以,还是安装个插件吧,直接去仓库里搜索lombok就成。
如果项目中使用高级配置,需要额外注意一下。虽然在编译的时候,lombok配置文件可以在任何能找到的目录,但是,lombok-intellij插件默认并不支持在任何目录,如果有配置文件,建议放在java的源代码根目录中。
更多 lombok 注解lombok 目前最新版本为 1.16.8,个人觉得比较常用的有以下几种,更多请查看官网。
@val
如果你要定义一个final的变量,并且不想写类型,这个可以帮到你。但是,在实际项目中,完全没有使用到。
@NonNull
这个在参数中使用,如果调用时传了null,就直接抛空指针。
@Data
@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstructor注解的集合。
@Getter与@Setter
作用于属性和类上,自动生成属性的getXXX()和setXXX()方法。若在类上,则对所有属性有效。并可通过AccessLevel参数控制方法的访问级别。
@ToString
作用于类,自动重写类的ToString()方法。常用的参数有exclude(指定方法中不包含的属性)、callSuper(方法中是否包含父类ToString()方法返回的值)
@EqualsAndHashCode
作用于类,自动重写类的equals()、hashCode()方法。常用的参数有exclude(指定方法中不包含的属性)、callSuper(方法中是否包含父类ToString()方法返回的值)
@NoArgsConstructor, @RequiredArgsConstructor和@AllArgsConstructor
作用于类,@NoArgsConstructor自动生成不带参数的构造方法;@RequiredArgsConstructor自动生成带参数的构造方法,主要针对一些需要特殊处理的属性,比如未初始化的final属性;@AllArgsConstructor自动生成包含所有属性的构造方法。
@Synchronized
作用于方法,可锁定指定的对象,如果不指定,则默认创建创建一个对象锁定。
@Log,或者直接@Slf4j
作用于类,具体包含@CommonsLog、@Log、@Log4j、@Log4j2、@Slf4j和@XSlf4j,分别对用不同的日志系统。利用此类注解,可为类创建一个log属性。
sonar源码审查sonar是一个源码审查工具。最新版5.X已经支持lombok的全部注解,不再认为是没有使用的变量。但是,旧的4.X还是认为没有使用这些变量。可以后向移植这些包,或者应用多带带的补丁。
原理呃,真的有人想看原理么?如果想,请留言,以后再发。
参考文献lombok, lombok 官网,但是,目前没有发现哪里可以捐赠
sonar, sonar 官网,对代码规范有一些建议
sonar-java, sonar-java 低版本插件,支持lombok
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/65918.html
摘要:权限中心的依赖声明声明依赖关系检查代码规范声明开发依赖命名空间检查代码规范,执行单元测试。单元测试持续交付一切都如此的完美,没有测试,又如何可以证明这件事情的完美,又如何可以保障交付的质量。 序 权限管理是无线运营系统中的核心模块,通过访问控制策略的配置,来约定人与资源的访问关系。 本文着重讲解如何通过PHP来构建一个灵活、通用、安全的权限管理系统。 关于权限 首先我们来聊聊权限。 权...
摘要:的本质是团队博客,关注互联网创业技术,每周推荐篇优质文章。坚持争取做到每周更新,与读者一起进步。第十一期第十期第九期第八期第七期第六期第五期第四期第三期切换至,第二期发布。创刊,用发布了第一次。 Tuniu Weekly Inspired By 《湾区日报》 我们团队也想基于这种模式,让大家感受到技术的人文。 《Tuniu Weekly》就这样产生了。 《Tuniu Weekly》...
摘要:认为权限授权实际上是的问题。具体的权限,正向授权与负向授权。应用建模业务场景权限管理鉴权设计应用建模系统架构上支撑权限系统灵活配置,不僵硬字段,不僵硬行为,基于各种业务权限管控的特征灵活设计。表示许可权与角色之间多对多的指派关系。 序 之前写过一篇大话权限中心的PHP架构之道,主要是从软件工程角度介绍,如何通过编码规范、依赖管理、数据源架构、事务处理、单元测试等技术,来保障权限系统的高...
摘要:认为权限授权实际上是的问题。具体的权限,正向授权与负向授权。应用建模业务场景权限管理鉴权设计应用建模系统架构上支撑权限系统灵活配置,不僵硬字段,不僵硬行为,基于各种业务权限管控的特征灵活设计。表示许可权与角色之间多对多的指派关系。 序 之前写过一篇大话权限中心的PHP架构之道,主要是从软件工程角度介绍,如何通过编码规范、依赖管理、数据源架构、事务处理、单元测试等技术,来保障权限系统的高...
摘要:使用可以大大减少代码行数,提高开发效率。提供了日志工具无参构造器提供方法提供方法方法有参构造器,参数按属性定义顺序传入提供了空指针检测,会抛出异常 lombok 是一个第三方工具,提供了一些注解功能,可以帮助我们消除冗余、臃肿的 Java 代码,比如 POJO 的 getter/setter 方法、构造方法、hashcode 方法等。lombok 在编译时根据注解生成具体的代码,在虚拟...
阅读 2052·2021-11-23 10:13
阅读 2767·2021-11-09 09:47
阅读 2690·2021-09-22 15:08
阅读 3290·2021-09-03 10:46
阅读 2216·2019-08-30 15:54
阅读 889·2019-08-28 18:09
阅读 2391·2019-08-26 18:26
阅读 2318·2019-08-26 13:48