首页 >Java >java教程 >了解 Lombok 中 @RequiredArgsConstructor、@AllArgsConstructor 和 @NoArgsConstructor 之间的区别

了解 Lombok 中 @RequiredArgsConstructor、@AllArgsConstructor 和 @NoArgsConstructor 之间的区别

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-24 00:09:10564浏览

Lombok 通过在编译时生成 Java 构造函数来简化它们的创建。 本指南解释了三个关键的 Lombok 注释:@NoArgsConstructor@AllArgsConstructor@RequiredArgsConstructor.

1. Lombok 构造函数注释

Understand the Difference Between @RequiredArgsConstructor, @AllArgsConstructor, and @NoArgsConstructor in Lombok

1.1 @NoArgsConstructor: 此注释生成一个不带参数的构造函数。 对于创建类实例而不提供任何初始值很有用。 例如:

<code class="language-java">import lombok.NoArgsConstructor;

@NoArgsConstructor
public class Example {}</code>

Lombok 创建一个相当于 public Example() {}.

的构造函数

1.2 @AllArgsConstructor: 这会生成一个构造函数,该构造函数为每个类字段采用一个参数。非常适合在对象创建时初始化所有字段。 示例:

<code class="language-java">import lombok.AllArgsConstructor;

@AllArgsConstructor
public class Person {
    private String name;
    private int age;
}</code>

龙目岛创建public Person(String name, int age) { ... }

1.3 @RequiredArgsConstructor: 这会为所有 final 字段和用 @NonNull 注释的字段生成构造函数。 确保基本字段始终被初始化。示例:

<code class="language-java">import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class Person {
    private final String name;
    private int age;
}</code>

Lombok 生成 public Person(String name) { ... } 因为 namefinal

2.选择正确的注释

最佳注释取决于您的具体需求:

2.1 @NoArgsConstructor 使用案例: 当您需要不带参数的构造函数时使用,这通常是实体类的 Hibernate 等框架所需要的。 例如:

<code class="language-java">@NoArgsConstructor
@Entity
public class User {
    @Id
    private Long id;
    private String username;
}</code>

2.2 @AllArgsConstructor 使用案例: 在对象创建期间所有字段都需要初始化时使用。 示例:

<code class="language-java">@AllArgsConstructor
public class Order {
    private String orderId;
    private String product;
    private int quantity;
}</code>

这允许Order order = new Order("123", "Laptop", 2);

2.3 @RequiredArgsConstructor 用例: 用于保证基本(通常是 final@NonNull)字段的初始化。 对于服务类中的依赖注入很有用:

<code class="language-java">@RequiredArgsConstructor
public class CustomerService {
    private final CustomerRepository repository;
    private final NotificationService notificationService;
}</code>

这确保了 repositorynotificationService 在创建 CustomerService 时被初始化。

3.结论

掌握这些 Lombok 注释可以生成更干净、更易于维护的 Java 代码。 选择取决于您的项目对对象初始化和框架兼容性的要求。 更多详情请参阅:了解 Lombok 中 @RequiredArgsConstructor、@AllArgsConstructor 和 @NoArgsConstructor 之间的区别

以上是了解 Lombok 中 @RequiredArgsConstructor、@AllArgsConstructor 和 @NoArgsConstructor 之间的区别的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn