【发布时间】:2019-08-22 19:48:34
【问题描述】:
interface MyInterface {
fun getTheString(): String
}
class MyClass(var theString: String) : MyInterface {
...
}
通常,当我在类的构造函数中有一个变量时,它会为该变量创建一个 getter 和 setter。在MyClass中,getTheString()和setTheString(String)方法在没有实现MyInterface时存在。
当MyClass 实现MyInterface 时,出现错误:
意外覆盖:以下声明具有相同的 JVM 签名 (getTheString()Ljava/lang/String;):
- public final fun (): MyClass中定义的字符串
- public abstract fun getTheString(): MyClass 中定义的字符串
我也有错误:“MyClass”类不是抽象的,没有实现抽象成员public abstract fun getTheString(): String defined in MyInterface.
所以我有几个问题:
- 为什么在实现接口时生成 2 个具有相同 JVM 签名的 getter 方法,而在不实现接口的情况下生成一个 getter 方法?
-
getTheString()方法是 kotlin 自动生成的,为什么我还没有实现这个方法? - 如何让变量生成的getter成为接口中方法的实现?
【问题讨论】:
-
你试过
@get:JvmName("getTheString_")吗? -
@EpicPandaForce 解决了
var theString上的错误,但不使用变量生成的方法作为接口内方法的实现 -
如果您只是想要在构造函数中定义的属性的自定义实现,请查看我的答案。
标签: intellij-idea kotlin interface