为什么getMessage()是一个Exception类的Kotlin未解决的引用?

Kotin文档说 :“Kotlin中的所有异常类都是Throwable类的后代,每个异常都有一个消息,堆栈跟踪和一个可选的原因。

Throwable的Java文档显示了一个getMessage()方法。 但是Throwable的Kotlin文档没有getMessage()。 所以这个代码:

fun main(args: Array<String>) { try { println("args size: ${args.size}"); } catch (e: Exception) { println(e.getMessage()) System.exit(1) } } 

给我这个编译错误:

 test_exception.kt:12:17: error: unresolved reference: getMessage println(e.getMessage()) ^ 

这表明我正在使用派生自Kotlin Throwable类的Kotlin Exception类。

但是,如果我将getMessage()更改为toString()并添加一个throw:

 fun main(args: Array<String>) { try { println("args size: ${args.size}"); throw Exception("something went wrong") } catch (e: Exception) { println(e.toString()) System.exit(1) } } 

我得到这个消息:

 java.lang.Exception: something went wrong 

这似乎是说,Exception类不是一个Kotlin异常类 – 但有一个getMessage()方法的Java版本,我不应该得到一个编译错误,当我尝试使用它。

One Solution collect form web for “为什么getMessage()是一个Exception类的Kotlin未解决的引用?”

没有其他的Throwable除了java.lang.Throwable 。 这个类被Java和Kotlin程序使用。

Throwable在Kotlin文档中有一个条目,这表明这是一个特殊的编译器“别名”。 这意味着对于所有的意图和目的,它是一个Kotlin类,其实例由java.lang.Throwable表示。 黑魔法。

TL; DR:

在Kotlin中e.getMessage()的等价物是e.message ,在文档中将其描述为open val message: String?

由于Throwable不是直接从Java中使用,而是映射到Kotlin,所以不能使用Java记法e.getMessage()作为属性。 以下是关于映射类型的更多信息: http : //kotlinlang.org/docs/reference/java-interop.html#mapped-types

  • Kotlin和Android lint检查
  • * arrayOf()是一个语句?
  • 让非泛型类在构造函数中使用泛型参数
  • 将Array <Byte>转换为ByteArray的规范方法是什么?
  • 正则表达式在Kotlin中不匹配
  • Vert.x需要Kotlin类型不匹配处理程序<AsyncResult <Unit >> found(Handler <AsyncResult <Unit >>) - > Unit
  • Kotlin与JPA / Hibernate:没有“开放”没有懒加载?
  • 摇篮。 Kotlin - 是否可以创建动态(“飞行”)任务?
  • Kotlin stdlib操作与循环
  • Kotlin Spek中的组执行顺序是错误的
  • 有问题写在Kotlin的EditText
  • Kotlin language will be the best programming language for Android.