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

Kotlin Arrow Optics出现Unresolved reference: company报错

Kotlin Arrow Optics 编译报错:Unresolved reference: company

问题复现

参照Arrow Optics模块文档编写嵌套数据类的透镜示例代码时,编译阶段抛出Unresolved reference: company错误,代码无法正常构建。
出错代码如下:

package com.app

import arrow.optics.Optional
import arrow.optics.optics

@optics
data class Street(val number: Int, val name: String) {
    companion object
}

@optics
data class Address(val city: String, val street: Street) {
    companion object
}

@optics
data class Company(val name: String, val address: Address) {
    companion object
}

@optics
data class Employee(val name: String, val company: Company) {
    companion object
}


fun main() {
    // 包含多层嵌套属性的不可变值
    val john = Employee("John Doe", Company("Kategory", Address("Functional city", Street(42, "lambda street"))))
    // 定义指向值内部指定字段的Optional透镜
    val optional: Optional<Employee, String> = Employee.company.address.street.name
    // 直接修改目标字段,不需要手写嵌套的copy方法
    optional.modify(john, String::toUpperCase)
}

当前项目配置的Arrow相关依赖如下:

//region Arrow
implementation("io.arrow-kt:arrow-core:$arrow_version")
implementation("io.arrow-kt:arrow-fx-coroutines:$arrow_version")
implementation("io.arrow-kt:arrow-optics:$arrow_version")
//endregion

故障原因

@optics注解不会在源码编写阶段直接提供Employee.company这类链式访问的透镜属性,这些属性是编译期通过Kotlin符号处理器(KSP)自动生成的。当前配置仅引入了Optics的核心运行时依赖,没有配置对应的KSP插件和注解处理器,自动生成的代码没有被加入编译路径,编译器找不到对应属性就会抛出未解析引用的错误。

修复步骤

  • 先确认项目当前使用的Kotlin版本,选择版本号完全匹配的KSP插件,在项目级构建配置中声明KSP插件依赖
  • 在业务模块的plugins配置块中添加KSP插件引用:id("com.google.devtools.ksp")
  • 在模块的依赖配置块中添加Arrow Optics的KSP处理器依赖,注意使用ksp依赖配置而非implementation:
    ksp("io.arrow-kt:arrow-optics-ksp-plugin:$arrow_version")
    
  • 执行Gradle同步,触发全量项目重编译,注解处理器会自动为所有标记@optics的数据类生成对应的透镜扩展属性,Employee.company.address.street.name这类链式调用即可正常编译通过。

注意:Arrow 1.0及以上版本的Optics模块已经完全废弃旧的KAPT注解处理器,必须使用KSP才能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:36:14