当前位置: 首页 > news >正文

@RequiredArgsConstructor和@AllArgsConstructor的区别

@RequiredArgsConstructorAllArgsConstructor 是 Lombok 库中用于自动生成构造方法的两个常用注解,它们的核心区别在于生成构造方法的参数范围不同。以下是详细对比:


1. 参数范围

注解生成的构造方法包含的字段
@RequiredArgsConstructor仅包含必须初始化的字段
- final 修饰的非静态字段
- 使用 @NonNull 注解且未在声明时赋值的非静态字段
@AllArgsConstructor包含所有非静态字段(无论是否已初始化或是否为 final

2. 示例对比

假设有以下类定义:

import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.NonNull;public class Example {private final String id;        // final 字段@NonNull private String name;   // @NonNull 注解字段(未初始化)private int age = 18;           // 已初始化的普通字段private static String country;  // 静态字段(不会被包含)
}
使用 @RequiredArgsConstructor

生成的构造方法参数仅包含必须初始化的字段:

public Example(String id, String name) {this.id = id;if (name == null) throw new NullPointerException("name is marked non-null but is null");this.name = name;
}
使用 @AllArgsConstructor

生成的构造方法参数包含所有非静态字段(无论是否初始化):

public Example(String id, String name, int age) {this.id = id;this.name = name;this.age = age;
}

3. 使用场景

注解适用场景
@RequiredArgsConstructor当需要强制初始化某些关键字段(如 final 字段或 @NonNull 字段)时,避免遗漏必要的参数。
@AllArgsConstructor当需要快速生成一个包含所有字段的构造方法(例如用于测试、反射等场景),但需注意字段可能过多导致参数列表冗长。

4. 注意事项

  • 静态字段:无论是 @RequiredArgsConstructor 还是 @AllArgsConstructor静态字段均不会被包含在构造方法中。
  • 初始化字段@RequiredArgsConstructor 会忽略已初始化的非 final 字段,而 @AllArgsConstructor 会包含所有非静态字段(无论是否已初始化)。
  • 安全性@RequiredArgsConstructor 会为 @NonNull 字段生成空值检查逻辑,而 @AllArgsConstructor 不会自动生成空值检查。

总结

  • 如果需要生成仅包含必要初始化字段的构造方法,选择 @RequiredArgsConstructor
  • 如果需要生成覆盖所有非静态字段的构造方法,选择 @AllArgsConstructor
http://www.xdnf.cn/news/177139.html

相关文章:

  • 深度图像报错
  • 大模型时代的具身智能:从虚拟到现实的智能体进化革命
  • Spark-Streaming核心编程(四)总结
  • Revive 中的 Precompile 合约:实现与调用机制
  • 学习海康VisionMaster之路径提取
  • 怎么检测代理IP延迟?如何选择低延迟代理?
  • 《明解C语言入门篇》读书笔记四
  • 总线位宽不变,有效数据位宽变化的缓存方案
  • 颠覆传统微商!开源AI智能名片链动2+1模式S2B2C商城小程序:重构社交电商的“降维打击”革命
  • 常见锁策略
  • 再学GPIO(二)
  • 02 业务流程架构
  • npm、pnpm 和 yarn 包管理工具
  • 【密码学——基础理论与应用】李子臣编著 第八章 SM2公钥密码算法 课后习题
  • LeetCode3☞无重复字符的最长子串
  • 辞九门回忆
  • 深入理解编程中的同步与异步:原理、区别及实战应用
  • Go 语言中的 `select` 语句详解
  • CSS元素动画篇:基于当前位置的变换动画(四)
  • 加密算法 AES、RSA、MD5、SM2 的对比分析与案例(AI)
  • (七)RestAPI 毛子(Http 缓存/乐观锁/Polly/Rate limiting)
  • 【学习笔记1】一站式大语言模型微调框架LLaMA-Factory
  • Vue2 与 Vue3 深度对比与技术解析
  • 黑马点评redis改 part 6
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据信息查看操作
  • 语音识别质量的跟踪
  • 力扣HOT100之链表:23. 合并 K 个升序链表
  • 树状数组单点操作+前缀K差分->区间K操作 -#131-#132
  • SpringBoot + SSE 实时异步流式推送
  • Linux内核中的编译时安全防护:以网络协议栈控制块校验为例