Kotlin继承-扩展具有相同方法名称的JVM类和接口

时间:2020-05-13 05:46:16

标签: kotlin graphql graphql-java

我有一个自定义的Exception类,如下所示:

class GenericException(message: String?, errorCode: Int) : RuntimeException(message), GraphQLError {
.....
}

众所周知,RuntimeException extends Throwable的方法叫getMessage()

现在的问题是,此接口GraphQLError(这是一个库接口) 也有一种名为getMessage()

的方法

结果,编译器对此抱怨:

constructor compiler error

好的,所以我实现了该方法:

override fun getMessage(): String {
    TODO("Not yet implemented")
}

现在我明白了:

Override Error

我应该在这里做什么?

1 个答案:

答案 0 :(得分:1)

我在评论中猜测是正确的,kotlin允许多重继承。确实是因为Throwable类。

您可以使用@JvmField批注指示编译器不要为该字段生成getter和setter,然后自己创建getter / setter。

interface HasMessage {
    fun getMessage(): String
}

class GenericException(
    @JvmField override val message: String?,  // var is also possible
    val errorCode: Int                        // I made it a property, might not be as well
) : RuntimeException(message), HasMessage {
    override fun getMessage(): String {
        // return of the super's getter, probably no use because you have field as property in this class
        val superGetMessage = super<RuntimeException>.message
        TODO("Not yet implemented")
    }
}

Play with the code yourself