Lombok @Getter 和 @Setter 注解的作用及使用方法
发布时间: 2024-04-14 19:01:11 阅读量: 205 订阅数: 43
![Lombok @Getter 和 @Setter 注解的作用及使用方法](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9vVEtIYzZGOHRzZzdnSjUzcEtCTXRvaWFTQTJYRVNKcGxhS3dKTUdQWDVHRmw3UkxMZHBMNlQ3YXBoMTFpYzd4aWF6bHFjTDV0aWI3dUQ0VnFueWljV2Y4WnhnLzY0MA?x-oss-process=image/format,png)
# 1. 理解 Lombok
Lombok 是一款 Java 库,旨在通过简化代码编写过程来提高开发效率。其主要优势在于可以通过简单的注解来自动生成 Getter、Setter、构造函数等常用方法,减少样板代码的编写,提高代码的可读性和简洁性。
要使用 Lombok,首先需要在项目中添加 Lombok 插件,并在 IDE 中进行相应的配置。安装 Lombok 插件后,IDE 会正确识别 Lombok 的注解,并在编译时自动生成对应的方法。配置 IDE 支持 Lombok 可以在开发过程中更方便地使用 Lombok 提供的功能,提升开发效率。
总而言之,Lombok 是一款非常实用的工具,可以让开发人员专注于业务逻辑而不是重复的代码编写工作,是现代 Java 开发中的利器。
# 2. @Getter 和 @Setter 注解基础
**了解 @Getter**
- @Getter 的作用
- @Getter 注解用于生成类中属性的 Getter 方法。
- 使用 @Getter 自动生成 Getter 方法
- 通过在类中添加 @Getter 注解,在编译时会自动生成对应属性的 Getter 方法。
- @Getter 的使用示例
```java
@Getter
public class User {
private String name;
private int age;
}
```
**学习 @Setter**
- @Setter 的作用
- @Setter 注解用于生成类中属性的 Setter 方法。
- 使用 @Setter 自动生成 Setter 方法
- 通过在类中添加 @Setter 注解,在编译时会自动生成对应属性的 Setter 方法。
- @Setter 的使用示例
```java
@Setter
public class User {
private String name;
private int age;
}
```
在实际开发中,@Getter 和 @Setter 注解帮助程序员简化了代码编写,提高了生产力。
# 3. 深入使用 @Getter 和 @Setter
- **@Getter 和 @Setter 支持的数据类型**
1. **基本数据类型**:
- @Getter 和 @Setter 注解不仅支持基本数据类型,如 int、double、boolean 等,还可以为这些类型生成对应的 Getter 和 Setter 方法。例如,下面这段代码展示了基本数据类型的使用:
```java
import lombok.Getter;
import lombok.Setter;
public class Person {
@Getter @Setter private int id;
@Getter @Setter private String name;
}
```
2. **引用数据类型**:
- 除了基本数据类型外,@Getter 和 @Setter 也支持引用数据类型,如 String、Object 等。在使用引用数据类型时,同样可以通过注解轻松生成 Getter 和 Setter 方法。示例代码如下:
```java
import lombok.Getter;
import lombok.Setter;
public class Person {
@Getter @Setter private String name;
@Getter @Setter private Person friend;
}
```
3. **集合类型**:
- @Getter 和 @Setter 注解还支持集合类型,如 List、Set、Map 等。通过注解,可以轻松生成集合类型的 Getter 和 Setter 方法。以下是一个使用集合类型的例子:
```java
import lombok.Getter;
import lombok.Setter;
import java.util.List;
public class Bookstore {
@Getter @Setter private String name;
@Getter @Setter private List<Book> books;
}
```
- **@Getter 和 @Setter 的额外功能**
1. **使用 @Getter/@Setter 注解与其它注解配合**:
- @Getter 和 @Setter 注解可以与其它 Lombok 注解一起使用,实现更强大的功能。例如,与 @NonNull 注解配合使用,可以确保生成的 Getter 或 Setter 方法不返回或接收 null 值。示例代码如下:
```java
import lombok.Getter;
import lombok.Setter;
import lombok.NonNull;
public class Person {
@Getter @Setter private String name;
@NonNull @Getter @Setter private Integer age;
}
```
2. **自定义访问级别**:
- 通过 @Getter 和 @Setter 注解,还可以自定义生成的 Getter 和 Setter 方法的访问级别。默认情况下,生成的方法为 public 访问级别,但也可以指定为 private 或 protected。以下是一个示例:
```java
import lombok.Getter;
import lombok.Setter;
public class Person {
@Getter(AccessLevel.PROTECTED) @Setter(AccessLevel.PRIVATE) private String name;
}
```
3. **避免生成 Getter/Setter 方法**:
- 在某些情况下,可能不希望生成特定字段的 Getter 或 Setter 方法。这时,可以通过在注解中设置 `AccessLevel.NONE` 来避免生成对应的方法。示例代码如下:
```java
import lombok.Getter;
import lombok.Setter;
import lombok.AccessLevel;
public class Person {
@Setter(AccessLevel.NONE) private int id;
@Getter(AccessLevel.NONE) private String secretInfo;
}
```
# 4. @Getter 和 @Setter 注解的进阶应用
- **@Getter/@Setter 的链式调用**
链式调用是指在一个对象上连续调用多个方法,每次调用返回的都是该对象本身,以便进行下一次方法调用。通过链式调用可以简化代码,提高代码的可读性和易用性。
```java
// 使用 Lombok 实现链式调用示例
@Data
public class User {
private String name;
private int age;
}
// 在使用处
public static void main(String[] args) {
User user = new User()
.setName("Alice")
.setAge(25);
}
```
- **@Getter/@Setter 的静态构建**
静态构建方法允许在实例化对象时直接设置属性值,方便快速构建对象。使用 @Builder 注解可以自动生成一个带有所有参数的构造方法。
```java
// 使用 @Builder 构建对象示例
@Builder
@Data
public class User {
private String name;
private int age;
}
// 在使用处
public static void main(String[] args) {
User user = User.builder()
.name("Alice")
.age(25)
.build();
}
```
- **@Getter/@Setter 注解的常见问题与解决方法**
| 问题 | 解决方法 |
|-------------------------------|-------------------------------------------------------------------------|
| 与继承的兼容性问题 | 使用 `@SuperBuilder` 注解解决,允许子类继承父类的建造者方法。 |
| 重复生成 Getter/Setter 方法的解决方案 | 使用 `@Accessors(chain = true)` 避免生成普通的 Getter/Setter 方法,支持链式调用。 |
以上是关于 @Getter 和 @Setter 注解的进阶应用,通过链式调用和静态构建方法可以提高代码的可读性和易用性,同时解决了常见问题带来的困扰。
# 5. @Getter 和 @Setter 注解的进阶应用
在本章中,我们将深入探讨 @Getter 和 @Setter 注解的一些高级用法,以便更好地利用这两个注解提高代码的效率和可读性。
- **@Getter/@Setter 的链式调用**
链式调用是指在一个对象上连续对多个方法进行调用,每次方法调用都返回对象本身,使得代码更加流畅和易读。下面我们通过一个示例来了解如何使用 Lombok 实现链式调用。
```java
@Setter
@Getter
public class Book {
private String title;
private String author;
public static void main(String[] args) {
Book book = new Book().setTitle("《Java编程思想》").setAuthor("Bruce Eckel");
System.out.println(book.getTitle() + " - " + book.getAuthor());
}
}
```
在上面的示例中,我们通过在 Book 类上使用 @Getter 和 @Setter 注解,可以在 main 方法中实现链式调用,即通过连续调用 `setTitle` 和 `setAuthor` 方法来设置书名和作者。
- **@Getter/@Setter 的静态构建**
静态构建是指通过静态方法创建对象实例的方式,可以在对象的初始化过程中提供更多便利性。在 Lombok 中,我们可以使用 @Builder 注解实现静态构建。
```java
@Builder
@Setter
@Getter
public class Car {
private String make;
private String model;
public static void main(String[] args) {
Car car = Car.builder().make("Toyota").model("Corolla").build();
System.out.println(car.getMake() + " - " + car.getModel());
}
}
```
在上面的例子中,我们在 Car 类上使用 @Builder 注解,然后在 main 方法中通过 `Car.builder().make("Toyota").model("Corolla").build()` 创建了 Car 对象,实现了静态构建的效果。
- **@Getter/@Setter 注解的常见问题与解决方法**
在实际开发中,有时候会遇到一些与 @Getter 和 @Setter 注解相关的问题,例如与继承的兼容性问题或重复生成 Getter/Setter 方法的情况。为了解决这些问题,我们可以采取一些策略:
- 与继承的兼容性问题:在父类中使用 @Getter/@Setter 注解时,子类如果需要覆盖父类的某个属性,可以通过 `@Accessors(chain = true)` 注解来实现链式调用。
- 重复生成 Getter/Setter 方法的解决方案:在使用 Lombok 时,有时候会因为 IDE 的缓存问题或文件编码格式问题导致 Getter/Setter 方法没有正确生成,可以尝试清理 IDE 缓存、重新生成 Getter/Setter 方法或检查文件编码格式来解决问题。
通过本章的学习,我们深入了解了 @Getter 和 @Setter 注解的进阶应用,包括链式调用、静态构建以及解决常见问题的方法,希望能够帮助读者更好地在实践中应用这两个注解,提高代码开发效率和质量。
0
0