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

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新版本会自动适配原有的Lombok var使用场景(二者语义在多数场景下一致)。

  • 配置Gradle确保编译参数正确
    在模块的build.gradle中补充编译版本配置,配合已有的toolchain配置,确保编译环境完全基于JDK 17:

    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_17
            targetCompatibility JavaVersion.VERSION_17
        }
        // 若项目使用Kotlin,可添加以下配置
        kotlinOptions {
            jvmTarget = "17"
        }
    }
    
  • 验证编译结果
    执行./gradlew clean compileDebugJavaWithJavac命令,检查是否还有相关警告或错误。若仍有问题,排查是否存在Lombok var的特殊用法(比如用于类字段声明,原生var不支持字段级声明),这类场景需手动修改为显式类型或Lombok val。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:33:22