Android Studio设置类的注释和文件模板
这个
1、Lombok简介
首先我们来介绍Lombok是个什么东西?Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。
官方地址:https://projectlombok.org/
github地址:https://github.com/rzwitserloot/lombok。
学习参考网址:https://zhuanlan.zhihu.com/p/32779910
2、为何要使用Lombok
我们在开发过程中,通常都会定义大量的JavaBean,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,当要增加属性或者对某个属性进行改变时,比如命名、类型等,都需要重新去生成上面提到的这些方法。这样重复的劳动没有任何意义,Lombok里面的注解可以轻松解决这些问题。
3、Lombok的缺点
无法支持多种参数构造器的重载
4、如何使用Lombok
下面我们主要讲的是Android平台的使用
https://projectlombok.org/setup/android
idea中需要添加插件才能支持Lombok,安装插件并重启。
插件可以直接搜索Android Studio的插件库进行安装。或者下载到本地进行安装:
https://plugins.jetbrains.com/plugin/6317-lombok-plugin
Follow the previous instructions (Gradle). In addition to setting up your gradle project correctly, you need to add the Lombok IntelliJ plugin to add lombok support to Android Studio:
- 1.Go to File > Settings > Plugins
- 2.Click on Browse repositories…
- 3.Search for Lombok Plugin
- 4.Click on Install plugin
- 5.Restart Android Studio
添加Gradle依赖
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.4'
annotationProcessor 'org.projectlombok:lombok:1.18.4'
}
5.Lombok的使用
下面,我们主要介绍Lombok几个常用的注解.
1 | @Data |
更多的可以参考:https://zhuanlan.zhihu.com/p/32779910
问题:使用IDE集成的时候。报错:Lombok Requires Annotation Processing 需要运行注解
解决方法:https://stackoverflow.com/questions/38911888/lombok-requires-annotation-processing
文章参考:https://blog.csdn.net/zhanlanmg/article/details/50392266
https://projectlombok.org/features/EqualsAndHashCode
原文中提到的大致有以下几点:
- 此注解会生成equals(Object other) 和 hashCode()方法。
- 它默认使用非静态,非瞬态的属性
- 可通过参数exclude排除一些属性
- 可通过参数of指定仅使用哪些属性
- 它默认仅使用该类中定义的属性且不调用父类的方法
- 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。
另:@Data相当于
@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。
通过官方文档,可以得知,当使用@Data注解时,则有了@EqualsAndHashCode注解,那么就会在此类中存在equals(Object other) 和 hashCode()方法,且不会使用父类的属性,这就导致了可能的问题。 比如,有多个类有相同的部分属性,把它们定义到父类中,恰好id(数据库主键)也在父类中,那么就会存在部分对象在比较时,它们并不相等,却因为lombok自动生成的equals(Object other) 和 hashCode()方法判定为相等,从而导致出错。
修复此问题的方法很简单:
使用@Getter @Setter @ToString代替@Data并且自定义equals(Object other) 和 hashCode()方法,比如有些类只需要判断主键id是否相等即足矣。
或者使用在使用@Data时同时加上@EqualsAndHashCode(callSuper=true)注解。