Android项目移除Lombok的`var`,使javac识别原生Java`var`
我们的代码库是Android项目,目标JDK版本为17,Gradle配置如下:
plugins { id("org.gradle.toolchains.foojay-resolver-convention") version("0.8.0") } java { toolchain { languageVersion = JavaLanguageVersion.of(17) } }
代码库曾大量使用Lombok的val,后续部分工程师改用Lombok的var,现在出现大量编译器警告:
warning: as of release 10, 'var' is a restricted type name and cannot be used for type declarations or as the element type of an array
若移除import lombok.var;语句,则会出现编译错误:
error: cannot find symbol var foo = bar; ^ symbol: class var
该警告无法单独抑制,只能禁用所有编译器警告,这并非我们想要的结果。请问如何让javac识别原生Javavar?
要让javac识别原生Java var,同时解决Lombok var的冲突问题,按以下步骤操作:
升级Lombok版本
使用Lombok 1.18.20及以上版本,这个版本开始原生支持Java 10+的var关键字,会自动兼容处理:当代码中使用var且未导入lombok.var时,Lombok不会将其识别为自身类型,而是交给javac处理原生var。清理代码中的
import lombok.var;
全局移除所有类中的import lombok.var;语句,确保代码中的var被javac当作原生关键字解析。Lombok新版本会自动适配原有的Lombokvar使用场景(二者语义在多数场景下一致)。配置Gradle确保编译参数正确
在模块的build.gradle中补充编译版本配置,配合已有的toolchain配置,确保编译环境完全基于JDK 17:android { compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } // 若项目使用Kotlin,可添加以下配置 kotlinOptions { jvmTarget = "17" } }验证编译结果
执行./gradlew clean compileDebugJavaWithJavac命令,检查是否还有相关警告或错误。若仍有问题,排查是否存在Lombokvar的特殊用法(比如用于类字段声明,原生var不支持字段级声明),这类场景需手动修改为显式类型或Lombokval。
内容的提问来源于stack exchange,提问作者Hounshell

