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

时间:2016-02-02 19:12:03

标签: java lambda kotlin

我试图从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

我试过谷歌搜索但我无法在任何地方找到答案

提前致谢

4 个答案:

答案 0 :(得分:2)

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

只需转到工具> Kotlin>在Project中配置Kotlin>使用Gradle的Android ,然后选择带有 Single module 单选按钮的Java模块,然后选择您的版本和确定

答案 1 :(得分:0)

通过升级到1.0候选发布版来解决问题。

答案 2 :(得分:0)

另一种解决方案:

如果您的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 :(得分:-3)

方法1)在项目文件中搜索Function1并将其重命名为First。

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