【每天学个新注解】Day 2 Lombok注解简解(一)—@Data、@Build、@Value

devtools/2024/9/22 20:50:18/

@Data

相当于同时使用了 @Getter 、@Setter 、@RequiredArgsConstructor、@ToString、@EqualsAndHashCode

1、如何使用

  • 需要同时使用@Getter 、@Setter 、@RequiredArgsConstructor、@ToString、@EqualsAndHashCode注解一个Bean的时候。

2、代码示例

例:

java">@Data
public class People {private String name;private int age;private String sex;
}

@Builder

帮助我们简化 Builder 模式的实现过程
Builder模式(创建者模式):创建型设计模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,提供一种通过链式方法来创建一个复杂的对象。

1、如何使用

  • 注解在类上,会生成一个名为builder的静态方法以及各属性的链式设置方法,最后通过 build 方法来构建对象。
  • 在构造函数上使用 @Builder 注解,可以控制哪些字段需要在 builder 中出现。比如,我们可能有一个包含很多字段的类,但只希望部分字段可以通过 builder 来设置。
  • 字段在 builder 模式中有默认值,我们可以在构造函数中设置。

2、代码示例

例:

java">@Builder
@ToString
public class People {private String name;private int age;private String sex;
}

那么创建对象时就可以通过builder静态方法实现

java">public class Test {public static void main(String[] args) {People p = People.builder().name("tom").age(18).sex("男").build();System.out.printf(p.toString() + "\n");}
}

在这里插入图片描述
例:

java">@ToString
public class People {private String name;private int age;private String sex;@Builderpublic People(String name, int age, String sex) {this.name = name;this.age = age;this.sex = (sex==null)?"未知":sex;}
}		

那么创建对象时就可以通过builder静态方法实现

java">public class Test {public static void main(String[] args) {People p = People.builder().name("tom").age(18).build();System.out.printf(p.toString() + "\n");}
}

当不设置sex的值时,可以通过默认值取到“未知”。
在这里插入图片描述

@Value

创建不可变类
不可变类的特点是它的状态在对象创建后不能被修改,这在多线程环境中尤其有用。

1、如何使用

  • 需要创建不可变类的时候,在类上添加该注解
  • @Value 注解是 @Data 的不可变版本,自动生成所有字段的 getter 方法、toString 方法、equals 和 hashCode 方法,以及一个全参数的构造函数,并将所有字段设为 private 和 final。

2、代码示例

例:

java">@Value
public class People {private String name;private int age;private String sex;
}

编译后:

java">import lombok.Generated;public final class People {private final String name;private final int age;private final String sex;@Generatedpublic People(String name, int age, String sex) {this.name = name;this.age = age;this.sex = sex;}@Generatedpublic String getName() {return this.name;}@Generatedpublic int getAge() {return this.age;}@Generatedpublic String getSex() {return this.sex;}@Generatedpublic boolean equals(Object o) {if (o == this) {return true;} else if (!(o instanceof People)) {return false;} else {People other = (People)o;if (this.getAge() != other.getAge()) {return false;} else {Object this$name = this.getName();Object other$name = other.getName();if (this$name == null) {if (other$name != null) {return false;}} else if (!this$name.equals(other$name)) {return false;}Object this$sex = this.getSex();Object other$sex = other.getSex();if (this$sex == null) {if (other$sex != null) {return false;}} else if (!this$sex.equals(other$sex)) {return false;}return true;}}}@Generatedpublic int hashCode() {int PRIME = true;int result = 1;int result = result * 59 + this.getAge();Object $name = this.getName();result = result * 59 + ($name == null ? 43 : $name.hashCode());Object $sex = this.getSex();result = result * 59 + ($sex == null ? 43 : $sex.hashCode());return result;}@Generatedpublic String toString() {return "People(name=" + this.getName() + ", age=" + this.getAge() + ", sex=" + this.getSex() + ")";}
}

http://www.ppmy.cn/devtools/115643.html

相关文章

Rust 运算符快速了解

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 4.1 运 算 符 前面已经学习了变量和常量,本节开始对它们进行操作&am…

Python的学习步骤

学习Python可以分为几个步骤,每个步骤都有其特定的学习方法和资源。以下是一个推荐的Python学习路径: 1. **基础知识**: - 学习Python的基本语法,包括变量、数据类型、运算符、控制流(if语句、循环)等。…

深入解析 JVM 运行时数据区:实战与面试指南

Java 虚拟机 (JVM) 是 Java 开发者的核心工具之一,它不仅负责执行 Java 字节码,而且还管理着应用程序运行时的数据存储。在本文中,我们将继续深入探讨 JVM 的运行时数据区,并通过实际案例和常见面试问题来帮助读者更好地理解和应用…

vue 中如何实现鼠标拖动出发滚动条的跟随移动?

使用场景 在做弹窗、表单或 tab 切换需求的时候,有时候因为内容过长会导致出现滚动条,但是只能拖动滚动条时会导致操作不便,我们会希望实现通过拖动内容区实现滚动条的滑动。这样操作就会简单多了。 实现思路 如果要实现鼠标辅助触发滚动条…

【Unity设计模式】Unity MVC/MVP架构介绍,及MVC/MVP框架的简单应用

文章目录 什么是MVC?MVC眼花缭乱设计图MVP和MVC最经典的MVC的业务流程Unity MVC 框架示例1. 创建项目结构2. 实现模型3. 实现视图4. 实现控制器5. 使用示例 总结参考完结 什么是MVC? MVC自1982年被设计出来,至今都有着很大比重的使用率&…

2.数据库-第二章数据库数据管理

2.数据库-第二章数据库数据管理 文章目录 2.数据库-第二章数据库数据管理DML1.新增:2.修改:3.删除: DML 1.新增: ​ insert into 表名[(列1,列2…)]values(值1,值2) 当出现多条插入时 使用逗号,隔开 inser into grade(GradeName) values("S1&qu…

OpenAI GPT o1技术报告阅读(4)- 填字游戏推理

✨继续阅读报告:使用大模型来学习推理(Reason) 原文链接:https://openai.com/index/learning-to-reason-with-llms/ 这次我们继续看一个填字游戏的案例。 我们先看下问题: 解决以下填字游戏: Across(横向&#xff09…

【数据结构】排序算法---归并排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言——迭代版C语言——递归版PythonJavaC——迭代版C——递归版Go 结语 1. 定义 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法&#xff0…