Kotlin – NoSuchMethodError实例化Throwable时

尝试实例化Throwable对象会引发以下错误

 java.lang.NoSuchMethodError: No direct method <init>(Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V in class Ljava/lang/Throwable; or its super classes (declaration of 'java.lang.Throwable' appears in /system/framework/core-libart.jar) 

我尝试的不同方式是:

 val s = Throwable() val t = Throwable("This is a message") 

我观察到的一些事情(在Mac上使用Android Studio):

  • 在Java类中,“Command + click”ing Throwable将我带到java.lang.Throwable而从Kotlin类中,我带到了Throwable中的Throwable定义
  • 我尝试使用val s = java.lang.Throwable()但它甚至不会编译

我正在使用Kotlin版本1.0.0-beta-2423

我错过了一些非常明显的东西吗

UPD:错误已修复,问题不应该再现。

这是Kotlin中的一个错误: https : //youtrack.jetbrains.com/issue/KT-5910 。 作为一种解决方法,将这两个参数传递给Throwable的构造函数。

我第一次遇到有趣的kotlin ,起初看起来我以为你是混合的JavaScript和Java,但不是真的。

我查阅了kotlin的文档,特别是Throwable ,有趣的是,构造函数如下:

 Throwable(message: String? = null, cause: Throwable? = null) 

然后,我抬起头如何在Kotlin中初始化对象,吓人。 并发现这个伟大的地方显示了如何声明对象和处理空值。 我宣布Throwable如下:

 //last arg as null - which is the cause var a : Throwable = Throwable("I am Throwable - Kotlin vesion.", null) 

这工作没有任何错误,当我在网上kotlin 编译器/解释器尝试它,然后我打印如下:

  print(a) print(a.printStackTrace()) 

我得到了以下输出:

 java.lang.Throwable: I am Throwable - Kotlin vesion. 

接下来是printStackTrace()的结果,如下所示:

 java.lang.Throwable: I am Throwable - Kotlin vesion. at Simplest_versionKt.main(Simplest version.kt:9) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.jetbrains.webdemo.executors.JavaExecutor.main(JavaExecutor.java:46) kotlin.Unit