使用Java Lambda调用Kotlin函数时,Kotlin无法访问kotlin.jvm.functions.Function1

06n*_*amt 7 java lambda kotlin

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

override fun First(list: LinqList<ElementType>, condition: (ElementType) -> Boolean) : ElementType
Run Code Online (Sandbox Code Playgroud)

像这样

int first = list.First(list,(x) -> x == 5);
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误

Error java: cannot access kotlin.jvm.functions.Function1
  class file for kotlin.jvm.functions.Function1 not found
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用Google搜索,但在任何地方都找不到答案

提前致谢

Sdg*_*emi 8

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

只需转到“ 工具”>“ Kotlin”>“在Project> Android中使用Gradle配置Kotlin”,并选择“ 单模块”单选按钮选择Java模块,然后选择版本并单击“确定”

  • 我无法设置它。我尝试创建一个 kotlin.kt 文件,然后按照 IDE 操作,解决我的问题。[AndroidStudio3.4/kotlin1.3.41/2019-07-08 10:26:19] (2认同)

Gha*_*ghi 6

另一个解决方案:

如果您的 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"
    }
}

Run Code Online (Sandbox Code Playgroud)

步骤(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"
}

Run Code Online (Sandbox Code Playgroud)

参考: 将 Kotlin 添加到现有应用程序