TypechoJoeTheme

阿尔法色色之屋

【Lombok】基础注解 之 @RequiredArgsConstructor

本文最后更新于2023年08月25日。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
为了有更好的阅读体验,阿尔法色色之屋为长篇文章提供了目录树,若没有正常显示,则需要手动缩小页面比例。

一、基本介绍

@RequiredArgsConstructor 作用于类,用于生成包含 final 和 @NonNull 注解的成员变量的构造方法

二、属性介绍

  • staticName:使生成的构造方法是私有的 并且生成一个参数为 final 变量和 @NonNull 注解变量,返回类型为当前对象的静态方法,方法名为 staticName 值
  • access:设置构造方法的访问修饰符,如果设置了 staticName,那么将设置静态工厂方法的访问修饰符 共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONE MODULE 是 Java 9 的新特性,NONE 表示不生成构造方法也不生成静态方法,即停用注解功能
  • onConstructor:列出的所有注解都放在生成的构造方法上 JDK 7 之前的写法是 onConstructor = @__({@Deprecated}),而 JDK 8 之后的写法是 onConstructor_ = {@Deprecated}

三、实战演练

@RequiredArgsConstructor(staticName = "newInstance", access = AccessLevel.PROTECTED, onConstructor_ = {@Deprecated})
public class ChengXiao {
   
    private String name;
    
    private final int age;
    
    @NonNull
    private String phone;
}
public class ChengXiao {
   
    private String name;
    
    private final int age;
    
      @NonNull
      private String phone;
    
      @Deprecated
      private ChengXiao(int age, @NonNull String phone) {
   
        if (phone == null)
            throw new NullPointerException("phone is marked non-null but is null");
        this.age = age;
        this.phone = phone;
    }
    
      protected static ChengXiao newInstance(int age, @NonNull String phone) {
   
          return new ChengXiao(age, phone);
      }
}

四、注意

当类中没有 final 和 @NonNull 注解的成员变量时会生成一个无参构造方法(因为没有符合要求的参数),而很多人认为 @Data 会生成无参构造方法就是此导致的

赞(0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

标签云