我尝试使用GraphQL和Kotlin开发REST API,并且遇到以下问题:我尝试创建一个扩展RuntimeException并实现GraphQLError的自定义异常,在Kotlin中,我无法做到这一点,因为我收到了以下消息:。
我通过为CustomException创建Java类来解决此问题。
但是我不知道为什么,当我创建一个扩展RuntimeException
并实现GraphQLError
的kotlin类时,我需要从GraphQLError覆盖getMessage()
方法,但是当我创建一个扩展RuntimeException并实现GraphQLError的java类时我不需要重写GraphQLError的getMessage()
方法。
谢谢!
最佳答案
似乎似乎尚不支持使用函数覆盖属性访问器。根据您的链接,当前是一个错误。可以通过一个简单的示例轻松验证这一点:
class Sample(val message : String) {
fun getMessage() :String = "MyString"
}
发生这种情况是因为属性
message
(在您的情况下为Throwable
的消息)和getMessage
函数(在您的情况下为GraphQL的getMessage
)将转换为相同的JVM签名。在我看来,当前的现状是属性访问器没有被视为单个成员,因此它们不能被成员函数覆盖,甚至不能实现抽象函数。我不确定为什么会这样。