实例化Throwable

时间:2015-12-08 23:13:22

标签: java android kotlin

尝试实例化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):

  • &#34;命令+点击&#34;在Throwable上,而在Java课程中,我带我到java.lang.Throwable,而在Kotlin课程中,它带我进入Throwable定义Throwable.kt
  • 我尝试使用val s = java.lang.Throwable(),但它甚至不会编译

我使用的是Kotlin版1.0.0-beta-2423

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

2 个答案:

答案 0 :(得分:1)

我第一次碰到kotlin有趣,初看起来我以为你是在混合javascript和java但是,不是真的。

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

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

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

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

当我在网上kotlin compiler/interpretor尝试时没有任何错误,然后我将其打印如下:

 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

答案 1 :(得分:1)

UPD:错误已修复,问题不再可重现。

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