消除代码冗长神器 - Lombok | 试验性注解

本文介绍了Lombok中的几种试验性注解,如@UtilityClass用于简化工具类编写,@StandardException用于自定义标准异常,以及流式API(如@Accessors)的使用。这些注解旨在减少代码冗余,但需注意它们仍处于试验阶段,可能存在变更风险。
摘要由CSDN通过智能技术生成


🔊 试验性的注解,目前正在 试验中,谨慎使用。主要原因如下:

  • 没有做过像核心特性那样的测试
  • 没法像核心特性那样快速修复 bug
  • 如果找到了更好的解决方案,则试验性特性可能会被重写或大量变更
  • 如果不够通用的话,可能后期会被移除

常用试验性注解

下面介绍一些常用的试验性注解。

工具类 - @UtilityClass

🤷 场景:很多时候,我们需要编写一个工具类。
😎 Java 解决方案:
Java工具类 - 编写规范
😎 Lombok 解决方案:提供 @UtilityClass 注解,将类 final 化,构造方法私有化,方法、字段、内部类 static 化。
注意:不要使用非的静态导入,否则 javac 编译器无法理解。
正确方式:import static ThisType.
,或者不使用静态导入。
示例:

@UtilityClass
public class UtilityClassExample {
  private final int CONSTANT = 5;

  public int addSomething(int in) {
    return in + CONSTANT;
  }
}

public final class UtilityClassExample {
  private static final int CONSTANT = 5;

  private UtilityClassExample() {
    throw new java.lang.UnsupportedOperationException("This is a utility class and cannot be instantiated");
  }

  public static int addSomething(int in) {
    return in + CONSTANT;
  }
}

自定义标准异常 - @StandardException

🤷 场景:java 中的自定义异常,一般都会覆盖父类的构造方法,且传入 message 或 cause 字段。如下所示:

public class ServiceException extends RuntimeException {

    public ServiceException() {
    }

    public ServiceException(String message) {
        super(message);
    }

    public ServiceException(Throwable cause) {
        super(cause);
    }

    public ServiceException(String message, Throwable cause) {
        super(message, cause);
    }
}

😎 Lombok 解决方案:提供 @StandardException 快速创建自定义异常(extends Exception 或 Throwable)的 4 个构造器。可配置项为构造器的访问级别。

  • 无参构造器
  • 只有 message 的构造器
  • 只有 cause 的构造器
  • 有 message 和 cause 的构造器

例子:

@StandardException
public class ServiceException extends RuntimeException {
}

public class ServiceException extends RuntimeException {
    public ServiceException() {
        this((String)null, (Throwable)null);
    }

    public ServiceException(String message) {
        this(message, (Throwable)null);
    }

    public ServiceException(Throwable cause) {
        this(cause != null ? cause.getMessage() : null, cause);
    }

    public ServiceException(String message, Throwable cause) {
        super(message);
        if (cause != null) {
            super.initCause(cause);
        }
    }
}

流式 API - @Accessors

setter/getter 流式 API,设置属性后,返回当前实例对象。
示例如下:

@Accessors(fluent = true)
public class AccessorsExample {
  	@Getter 
	@Setter
  	private int age = 10;
}

public class AccessorsExample {
  private int age = 10;
  
  public int age() {
    return this.age;
  }
  
  public AccessorsExample age(final int age) {
    this.age = age;
    return this;
  }
}

onMethod= / onConstructor= / onParam=

前面我们看到,有的注解上可以配置 onMethod、onConstructor、onParam 参数,其可以在生成的方法、构造方法,方法参数上添加自定义的注解。
值得注意的是:类型为 AnyAnnotation[],不同的 JDK 版本写法不同哦

  • JDK7:@Getter(onMethod=@__({@AnnotationsGoHere}))
  • JDK8:@Getter(onMethod_={@AnnotationsGohere})

其它试验性注解

@ExtensionMethod:在已有类型中加入新方法
@FieldDefaults:设置字段的默认信息,比如 final、访问级别等
@Delegate:委派访问,使用 delegate 对象来操作
@Helper:在一个方法中创建一个类,然后调用该类中的方法
@FieldNameConstants:创建类的的字段名称为常量,比如类中某个字段名称,需要变成 String,方便后续反射时使用
@SuperBuilder:使用父类的字段进行 Builder 操作
@Tolerate:使 Lombok 忽略已有类中的方法或构造方法
@Jacksonized:是 @Builder 和@SuperBuilder 的附加注解,自动配置生成的 Builder 使用 Jackson 反序列化。

参考

1.https://projectlombok.org/features/experimental/

更多文章

1.消除代码冗长神器 - Lombok | 入门-CSDN博客
2.消除代码冗长神器 - Lombok | 安装-CSDN博客
3.消除代码冗长神器 - Lombok | val/var 本地变量声明-CSDN博客
4.消除代码冗长神器 - Lombok | @Setter/@Getter 生成 setter/getter 方法-CSDN博客
5.消除代码冗长神器 - Lombok | @EqualsAndHashCode/@ToString注解详解-CSDN博客
6.消除代码冗长神器 - Lombok | @NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor 构造方法-CSDN博客
7.消除代码冗长神器 - Lombok | @Data 通用 POJO 注解-CSDN博客
8.消除代码冗长神器 - Lombok | @With 不可变的 setter 方法-CSDN博客
9.消除代码冗长神器 - Lombok | @Value 不可变 entity-CSDN博客
10.消除代码冗长神器 - Lombok | @Cleanup 自动清理资源-CSDN博客
11.消除代码冗长神器 - Lombok | @Log/@Slf4j 创建日志对象-CSDN博客
12.消除代码冗长神器 - Lombok | @Builder注解 - Builder 设计模式快速实现
13.消除代码冗长神器 - Lombok | @NonNull 判空逻辑
14.消除代码冗长神器 - Lombok | @SneakyThrows 检查型异常转抛
15.消除代码冗长神器 - Lombok | @Synchronized 锁
16.消除代码冗长神器 - Lombok | 试验性注解
17.消除代码冗长神器 - Lombok | 进阶用法 - 全局配置 & 去除Lombok
18.消除代码冗长神器 - Lombok | 高阶用法 -> 手写 @Getter 注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甘蓝聊Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值