Android中Lombok的@RequiredArgsConstructor失效,但@AllArgsConstructor可用
我帮你分析下这个问题,你遇到的@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

