【问题标题】:Kotlin cannot access kotlin.jvm.functions.Function1 when calling kotlin function with java lambda使用 java lambda 调用 kotlin 函数时,Kotlin 无法访问 kotlin.jvm.functions.Function1
【发布时间】:2016-02-02 19:12:03
【问题描述】:

我正在尝试从 Java 调用以下 Kotlin 函数

override fun First(list: LinqList<ElementType>, condition: (ElementType) -> Boolean) : ElementType

喜欢这个

int first = list.First(list,(x) -> x == 5);

但我收到以下错误

Error java: cannot access kotlin.jvm.functions.Function1
  class file for kotlin.jvm.functions.Function1 not found

我试过谷歌搜索,但我在任何地方都找不到答案

提前致谢

【问题讨论】:

  • 首先,您定义的函数与您调用的函数名称不同(First vs FirstOrDefault)。
  • 你是如何编译你的 Java 项目的?
  • 使用 gradle 和 IntelliJ 15 我修正了错字
  • 您的 Java 模块是否在其依赖项中包含 Kotlin 运行时?它需要。
  • 是的,三个罐子都可以

标签: java lambda kotlin


【解决方案1】:

当我使用最新的稳定版本(当前为 1.3.30)为我的 Java 模块配置 Kotlin 编译器和运行时时,我的问题得到了解决

只需转到 Tools > Kotlin > Configure Kotlin in Project > Android with Gradle 并选择您的 Java 模块并选择 Single module 单选按钮,然后选择您的版本和 好的

【讨论】:

  • 我无法设置。我尝试创建一个 kotlin.kt 文件,然后按照 IDE 解决我的问题。 [AndroidStudio3.4/kotlin1.3.41/2019-07-08 10:26:19]
  • 这在您的项目基于 java 但您需要使用基于 kotlin 并在您的 java 代码中使用其函数时很有用。
【解决方案2】:

另一种解决方案:

如果您的 android 项目中有多个模块,请确保您已将以下配置添加到每个使用 kotlin 的模块中:

步骤 (1)- 项目 build.gradle:

// Project build.gradle file.
buildscript {
    ext.kotlin_version = '1.3.30'
    ...
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

步骤(2)- 在每个模块中使用 kotlin:

apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-android'

...

dependencies {
   implementation "androidx.core:core-ktx:1.0.1"
   implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

参考: Add Kotlin to an existing app

【讨论】:

    【解决方案3】:

    方法一)在你的工程文件中搜索Function1,重命名为First。

    方法 2) 在项目文件中搜索 Function1 并删除所有出现的位置。

    【讨论】:

    • 对不起,这没有帮助。 Function1 类是 Kotlin 标准库的一部分,因此您的建议都不适用。
    • 这不是问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2015-04-02
    • 2018-12-11
    相关资源
    最近更新 更多