传递lambda

时间:2017-11-02 23:40:59

标签: java lambda kotlin

我使用Kotlin创建了一个Android应用程序,而lambda却有些奇怪。我通过mapOf(1 to {...}, 2 to {...})并获得NoClassDefFoundErrorClassNotFoundException

我尝试在桌面上重写它,并获得相同的但是具有不同的堆栈跟踪。

    fun main(args: Array<String>) {
        call(mapOf(
            1 to { "asd" },
            2 to { 999 }
        ))
    }

    fun call(x: Map<Int, () -> Any>) {

    }

这是堆栈跟踪:

Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
    at TestKt.main(test.kt)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jetbrains.kotlin.runner.AbstractRunner.run(runners.kt:61)
    at org.jetbrains.kotlin.runner.Main.run(Main.kt:109)
    at org.jetbrains.kotlin.runner.Main.main(Main.kt:119)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 8 more

1 个答案:

答案 0 :(得分:0)

这不是您的代码中的问题。运行应用程序时出现问题。 Kotlin带有自己的标准类库kotlin-runtime.jar。你应该在classpath中拥有这个库:

java -cp $KOTLIN_HOME/lib/kotlin-runtime.jar:MyApp.jar com.my.AppKt

或者您应该使用-include-runtime编译应用程序:

kotlinc app.kt -include-runtime -d MyApp.jar