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

JAVA几个注解记录

在Java中,@Data@AllArgsConstructor@NoArgsConstructor是Lombok库提供的注解,用于自动生成Java类中的样板代码(如getter、setter、构造函数等),从而减少冗余代码,提高开发效率。以下是它们的详细功能和使用场景:

1. @Data 注解

功能

  • 自动生成所有字段gettersetter方法。
  • 生成equals()hashCode()toString()方法。
  • 生成一个包含必需字段(final字段和标记为@NonNull的字段)的构造函数。

示例

import lombok.Data;@Data
public class User {private Long id;private String name;private int age;
}

等效于手动编写

public class User {private Long id;private String name;private int age;// Getters and Setterspublic Long getId() { return id; }public void setId(Long id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public int getAge() { return age; }public void setAge(int age) { this.age = age; }// Equals and HashCode@Overridepublic boolean equals(Object o) { ... }@Overridepublic int hashCode() { ... }// toString@Overridepublic String toString() { ... }// Constructor for required fields (if any)public User() { }
}

2. @AllArgsConstructor 注解

功能

  • 自动生成一个包含所有字段的构造函数。

示例

import lombok.AllArgsConstructor;@AllArgsConstructor
public class User {private Long id;private String name;private int age;
}

等效于手动编写

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

3. @NoArgsConstructor 注解

功能

  • 自动生成一个无参构造函数

示例

import lombok.NoArgsConstructor;@NoArgsConstructor
public class User {private Long id;private String name;private int age;
}

等效于手动编写

public User() { }

4. 组合使用场景

常见组合

import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Long id;private String name;private int age;
}

为什么需要同时使用?

  • @Data 会生成必需字段的构造函数,但如果类中没有必需字段(如无final字段或@NonNull字段),则会生成无参构造函数。若存在必需字段,@Data 不会生成无参构造函数,此时需要显式添加@NoArgsConstructor
  • @AllArgsConstructor 确保生成包含所有字段的构造函数,方便对象初始化。

5. 注意事项

  1. 与Jackson等库的兼容性

    • 反序列化(如JSON转对象)通常需要无参构造函数,因此建议始终添加@NoArgsConstructor
  2. final字段与@NoArgsConstructor冲突

    • 如果类中有final字段,@NoArgsConstructor会报错,需使用@NoArgsConstructor(force = true),此时final字段会被初始化为默认值(如null、0)。
  3. 自定义构造函数冲突

    • 如果手动编写了构造函数,Lombok不会自动生成构造函数,需通过@Tolerate注解解决冲突。

6. 依赖配置

要使用这些注解,需在项目中添加Lombok依赖:

Maven

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version><scope>provided</scope>
</dependency>

Gradle

implementation 'org.projectlombok:lombok:1.18.26'
annotationProcessor 'org.projectlombok:lombok:1.18.26'

通过使用这些注解,Java类可以变得更加简洁,同时保持完整的功能。

http://www.dtcms.com/a/285218.html

相关文章:

  • 【Spring AI Alibaba实战Demo】通过Spring AI Alibaba接入本地部署的大模型和线上大模型,实现流式简单对话
  • Ubuntu FTP服务搭建与配置
  • Product Hunt 每日热榜 | 2025-07-17
  • druid连接池
  • Xss-labs 靶场lever1~lever8通关练习
  • 第12章 存储类、链接和内存管理
  • window下 wsl 下怎么配置 kimi-k2 驱动 Claude Code
  • 网络通信原理
  • 订货系统能接金蝶吗是什么?
  • FreeRTOS—中断管理
  • 一文学会c++vector
  • Web前端:JavaScript鼠标事件
  • 实习十二——协议分层
  • pytorch小记(三十一):深入解析 PyTorch 权重初始化:`xavier_normal_` 与 `constant_`
  • 基于selenium的pyse自动化测试框架
  • MyUI1.0全新现代化 Vue.js 组件库框架上线
  • CAD断层扫描三维重建插件
  • ubuntu启用ssh
  • HD现代机器人与TESOLLO合作推出工业自动化双臂机器人解决方案
  • 控制台输出的JAVA格斗小游戏-面向对象
  • properties中文乱码
  • 细菌实验入门:浓度测定与菌种鉴定技术详解
  • 累和,累积,斐波拉契
  • 如何统一分销价格体系实战指南?
  • 验证损失判断过拟合情况
  • echart设置trigger: ‘axis‘不显示hover效果
  • c#笔记之方法的形参列表以及方法重载
  • 智能外呼系统应用场景
  • Windows 11清理C盘方法大全:磁盘清理/禁用休眠/系统还原点/优化大师使用教程
  • PostgreSQL 中的 pg_trgm 扩展详解