You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中Lombok的@RequiredArgsConstructor失效,但@AllArgsConstructor可用

解决@RequiredArgsConstructor在Android Studio 3.2 Canary 15 + Gradle 3.0.1下失效的问题

我帮你分析下这个问题,你遇到的@RequiredArgsConstructor失效并触发Desugar编译错误,主要是旧版本Lombok和Android新构建工具的兼容性冲突导致的,下面是具体的解决步骤和正确用法说明:

问题根源

你当前使用的Lombok版本是1.16.+,这个版本比较老旧,和Android Gradle插件3.0.x的Desugar(字节码转换工具)存在兼容性问题——尤其是@RequiredArgsConstructor生成的构造器代码在Desugar处理时会抛出异常,而@AllArgsConstructor因为生成逻辑不同暂时没触发这个问题。

正确解决步骤

1. 升级Lombok到兼容版本

把Lombok版本升级到1.18.x及以上,这个版本修复了大量和Android构建流程的兼容性问题。修改你的模块build.gradle中的依赖:

dependencies {
    implementation 'org.projectlombok:lombok:1.18.28'
    annotationProcessor 'org.projectlombok:lombok:1.18.28'
}

尽量使用具体版本号而非通配符,避免依赖版本不稳定带来的潜在问题。

2. 优化Android构建环境(可选但推荐)

你当前用的是Android Studio 3.2 Canary 15(预览版),这类版本本身可能存在未修复的构建bug,建议换成同系列的稳定版(比如Android Studio 3.2.1),同时确保根目录build.gradle中的Android Gradle插件版本和Gradle版本匹配:

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1' // 和Gradle 3.0.1匹配的稳定插件版本
    }
}

3. 注解的正确使用方式

你的@RequiredArgsConstructor用法本身是正确的,它会为所有标记了@NonNull的字段生成构造器,加上staticName = "of"后会生成一个静态工厂方法。保持你的测试类代码即可:

@Data
@RequiredArgsConstructor(staticName = "of")
public class DataClassUsingLombok {
    @NonNull String data1;
    @NonNull int data2;
}

之后你就可以通过DataClassUsingLombok.of("示例数据", 123)来创建实例,无需手动编写构造器。

4. 清理缓存并重建项目

修改依赖后,务必执行以下操作消除缓存影响:

  • 点击Android Studio菜单栏的Build > Clean Project
  • 接着执行Build > Rebuild Project
  • 必要时重启Android Studio

内容的提问来源于stack exchange,提问作者dextto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:51:18