使用 Lombok 替代Getter和Setter 方法

本文介绍Lombok库的使用方法,通过示例展示如何利用Lombok注解自动生成Getter、Setter等方法,减少模板代码,提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 Lombok 替代Getter和Setter 方法

一、Lombok 简介
1、Project Lombok是一个java库,可以自动插入到您的编辑器和构建工具中,让您的java变得更加精彩。 切勿再次写入另一个getter或equals方法
2、官网地址: https://www.projectlombok.org/

二、安装 Lombok
1、下载 Lombok jar包 : https://www.projectlombok.org/download
2、 Eclipse / MyEclipse 安装 :
  • 方法一: 双击下载的 Lombok.jar
  • 方法二: java -jar Lombok.jar (需要到对应jar包路径下)
  • 截图如下: (若Eclipse 不是安装版的,请点击 Specify location ... 手动选择路径 )





三、使用 Lombok
1、 定义一个普通的 Person 实体,不提供get set 方法,使用 @Getter @Setter 注解
package com.haha.study.lombok;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
/**
 * description: 定义一个普通用户实体,不提供 getter , setter 方法
 * @version v1.0
 * @author w
 * @date 2018年7月4日上午10:00:24
  */
@Getter
@Setter
@ToString(exclude={"name","age"})
public class Person {
	private String name;
	private int age ;
	private String address;
}


2、测试 Person 实体
package com.haha.study.lombok;
/**
 * description: 针对 Person 类使用了 lombok.jar 的@Getter @Setter @ToString 注解 测试
 * @version v1.0
 * @author w
 * @date 2018年7月4日上午10:01:37
 */
public class PersonTest {
	public static void main(String[] args) {
		Person p = new Person();
		p.setAddress("北京市 朝阳区");
		System.out.println("lombok "+p);
	}
}

3、和编译后的 .class 文件对比



四、Lombok 中其他的注解
1、 @var , @val : 使用Lombok ,java也能够像javascript一样使用弱类型定义变量了。
注意: val注解变量申明是final类型 var注解变量是非final类型。

       2、 @NonNull : 在方法或构造函数的参数上使用@NonNull,lombok将生成一个空值检查语句。

      3、 。。。。 请参考这位大佬的: https://blog.youkuaiyun.com/v2sking/article/details/73431364#commentBox

4、 或者自己看官方文档: https://projectlombok.org/features/all



<think>好的,用户遇到了Lombok没有生成GetterSetter方法的问题,需要帮忙解决。首先,我需要回忆一下Lombok的工作原理常见的配置问题。根据用户提供的引用内容,可能的原因有几个。 首先,引用[1]提到,如果类中已经存在同名且参数数量相同的方法Lombok不会生成对应的方法,并且会发出警告。所以第一个可能的原因是用户自己定义了与Getter/Setter同名的方法,导致Lombok跳过生成。这时候可能需要检查代码,看是否有这样的方法存在,或者是否误用了@Tolerate注解。 然后,引用[3][4]提到Lombok在Android开发中的使用,需要确保Gradle配置正确,特别是作为编译时依赖。如果用户的项目是Android应用,可能需要检查依赖是否正确添加,避免Lombok被打包到DEX文件中,同时确保注解处理器正确配置。此外,IDE插件是否安装也是一个关键点,比如在IntelliJ或Eclipse中需要启用Lombok插件,否则代码可能不会在IDE中显示生成的代码。 接着,引用[5]提到Lombok的基本概念,可能用户对Lombok使用还不够熟悉,比如是否正确使用注解,比如@Getter@Setter的位置是否正确,是否应用在类或字段上。如果注解放在类上,应该生成所有字段的Getter/Setter;如果放在特定字段上,则只生成该字段的。同时,用户可能没有启用注解处理,特别是在使用IDE时,需要确保启用注解处理功能,否则代码不会被处理。 另外,编译器的版本也可能影响Lombok的功能,如果使用较旧的Java版本,可能需要调整编译器设置。还有,构建工具如Maven或Gradle的配置是否正确,是否包含了必要的Lombok依赖注解处理器配置。 综合这些可能的原因,解决方案应该从检查现有代码中的方法冲突开始,然后验证依赖配置IDE设置,最后确认注解的正确使用构建配置。需要逐步排查,从简单到复杂,确保每个环节都正确无误。</think>### 解决 Lombok生成 Getter/Setter方法 #### 1. **检查是否存在同名方法** - **问题原因**:如果类中已手动定义了与 Lombok 生成的 `getXxx()` 或 `setXxx()` 同名的方法Lombok 会跳过生成以避免冲突[^1]。 - **解决方法**: - 删除手动定义的重复方法,或使用 `@Tolerate` 注解标记现有方法,告知 Lombok 忽略此方法[^1]。 - 注意:`@Tolerate` 不能用于参数数量相同的无参方法(如 `getter`),否则会导致编译错误。 #### 2. **验证 Lombok 依赖配置** - **问题原因**:未正确引入 Lombok 依赖或配置错误(尤其在 Android 项目中)[^3][^4]。 - **解决方法**: - **Maven 项目**:确保 `pom.xml` 包含以下依赖: ```xml <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <scope>provided</scope> </dependency> ``` - **Android/Gradle 项目**:在 `build.gradle` 中添加: ```gradle dependencies { compileOnly 'org.projectlombok:lombok:1.18.24' annotationProcessor 'org.projectlombok:lombok:1.18.24' } ``` #### 3. **检查 IDE 插件与注解处理** - **问题原因**:IDE 未启用 Lombok 插件或注解处理功能[^3][^4]。 - **解决方法**: - **IntelliJ/Android Studio**: 1. 安装 `Lombok Plugin`(通过 `Preferences > Plugins`)。 2. 启用注解处理:`Settings > Build > Compiler > Annotation Processors > Enable annotation processing`。 - **Eclipse**: 1. 安装 Lombok 插件(下载 `lombok.jar` 并运行)。 2. 重启 IDE 并检查 `Enable annotation processing`。 #### 4. **确认注解使用方式** - **问题原因**:错误使用 Lombok 注解(如作用域错误)[^5]。 - **正确示例**: ```java @Getter @Setter // 类级别:生成所有字段的 getter/setter public class User { private String name; @Setter(AccessLevel.PROTECTED) // 字段级别:生成 protected setter private int age; } ``` #### 5. **清理并重新编译项目** - 执行以下操作确保生成代码生效: 1. 清理构建目录(如 `mvn clean` 或 `gradle clean`)。 2. 重新编译项目(如 `mvn compile` 或 `gradle build`)。 --- ### 相关问题 1. **Lombok 如何实现编译时代码生成?** (答案:通过注解处理器在编译时修改 AST,生成字节码[^5]) 2. **Lombok 在 Android 开发中有哪些限制?** (答案:需确保仅作为编译时依赖,避免 DEX 文件臃肿;部分注解可能不兼容[^3]) 3. **如何为特定字段禁用 Lombok 生成getter/setter?** (答案:使用 `@Getter(AccessLevel.NONE)` 或 `@Setter(AccessLevel.NONE)` 注解该字段[^4])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值