gpt4 book ai didi

kotlin - 为什么 getMessage() 在带有 Exception 类的 Kotlin 中是未解析的引用?

转载 作者:行者123 更新时间:2023-12-04 23:15:04 26 4
gpt4 key购买 nike

Kotin documentation says “Kotlin 中的所有异常类都是 Throwable 类的后代。每个异常都有一个消息、堆栈跟踪和一个可选的原因。”

The Java documentation for Throwable显示了一个 getMessage() 方法。但是Kotlin documentation for Throwable没有 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() 并添加一个抛出:
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 Exception 类——而是具有 getMessage() 方法的 java 版本,当我尝试使用它时,我不应该得到编译错误。

最佳答案

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

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

特尔;博士:

相当于 e.getMessage()在 Kotlin 中是 e.message ,在文档中描述为 open val message: String? .

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

关于kotlin - 为什么 getMessage() 在带有 Exception 类的 Kotlin 中是未解析的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44600926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com