[利其器]Android Lombok减少代码量

在这里插入图片描述
最近发现后端开发中,用到了一款第三方插件Lombok。利器啊。真可以减少代码量。

Setup

  • 在每个build.gradle都加上这么两句
dependencies {
    ...
    //Lombok //加上下面两行
    compileOnly 'org.projectlombok:lombok:1.18.8'
    annotationProcessor 'org.projectlombok:lombok:1.18.8'
    ...
}
  • 在App的build.gradle中加上一句
android {
    project.ext.setDefaultConfig project

    defaultConfig {
        ...
        javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }   //加上这一行
        ...
    }
}

说明文档

最详细的在这里:javadoc

@Data

注解在类上;
所有方法的集合!!!

  • @ToString,
  • @EqualsAndHashCode,
  • @RequiredArgsConstructor,
  • 所有字段的@Getter,
  • 所有非final字段的@Setter!
@Getter/@Setter

注解在属性上;
提供Getter和Setter方法。
不会重写已有的方法:例如变量foo。public int getFoo() {return foo;}

@NonNull

如果给参数加个这个注解 参数为null会抛出空指针异常

@Cleanup

声明后,会自动关闭流。即自动调用close().

@ToString

注解在类上;为类提供toString方法(可以添加排除和依赖)

@EqualsAndHashCode

注解在类上;自动生成hashCode和equals代码。轻松解决equality问题。

@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

注解在类上;按顺序生成构造函数;

  • NoArgsConstructor为类提供一个无参的构造方法
  • RequiredArgsConstructor生成一个包含常量,和标识了NotNull的变量的构造方法。生成的构造方法是私有的private
  • AllArgsConstructor生成一个包含所有变量的构造方法
@Value

注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。

@Builder

被注解的类加个构造者模式

@SneakyThrows

等同于try/catch 捕获异常

@Synchronized

加个同步锁

@Getter(lazy=true)

lazy版的getter annotation,会提高代码效率,同时由Lombok帮助你管理线程安全问题,大可放心。

@Log

注解在类上;为类提供一个 属性名为log 的 log4j 日志对象

val

局部final变量

var

非final的局部变量

Lombok的优缺点

  • 优点:
    • 通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率
    • 代码变得简洁,不用过多的去关注相应的方法
    • 属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等
  • 缺点:
    • 不支持多种参数构造器的重载
有人说,虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度。

这一点值得商榷!在我看来,Lombok减少了代码量,这本身就是双刃剑。代码量少了,可读性就会适当下降。然而,这些getter/setter都是极为简单的方法。真的有下降多少吗?不见得。

在我看来,Lombok利大于弊。用用看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值