传递lambda的映射时,得到了NoClassDefFoundError

我使用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 

这不是你的代码中的问题。 这是运行你的应用程序的问题。 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