繁体   English   中英

Kotlin 光学数据 class 参考中未解决的参考

[英]Unresolved reference in Kotlin optic data class reference

正在使用 Kotlin 的箭头库并在文档https://arrow-kt.io/docs/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() {
    // an immutable value with very nested components
    val john = Employee("John Doe", Company("Kategory", Address("Functional city", Street(42, "lambda street"))))
// an Optional points to one place in the value
    val optional: Optional<Employee, String> = Employee.company.address.street.name
// and now you can modify into a new copy without nested 'copy's!
    optional.modify(john, String::toUpperCase)

}

我的依赖是下一个

    //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

您的 Gradle 配置似乎缺少一些必需的 Google KSP 设置。 您可以在网站的Arrow 光学设置部分及下方找到它。

plugins {
    id("com.google.devtools.ksp") version "$googleKspVersion"
}

dependencies {
    ksp("io.arrow-kt:arrow-optics-ksp-plugin:$arrowVersion")
}

您还需要让 IDEA 了解生成的源代码,否则它将无法正确拾取代码以进行代码突出显示和语法报告。 设置在Kotlin 官方网站上进行了说明,如下所示。

kotlin {
    sourceSets.main {
        kotlin.srcDir("build/generated/ksp/main/kotlin")
    }
    sourceSets.test {
        kotlin.srcDir("build/generated/ksp/test/kotlin")
    }
}

在构建脚本中添加以下代码 (*.gradle.kts)。 它将注册一个新的源目录,以便您的 IDE 将看到生成的扩展。 无论您拥有多少口味和构建类型,这都有效。

android {
    // ...
    androidComponents.onVariants { variant ->
        val name = variant.name
        sourceSets {
            getByName(name).kotlin.srcDir("${buildDir.absolutePath}/generated/ksp/${name}/kotlin")
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM