我正在尝试使用getter方法实现一个接口,该方法与实现类的构造函数参数名称相匹配。
interface Car{
fun getModel(): Int
}
class Honda(val model: Int): Car {
override fun getModel(): Int {
}
}
如果Honda
未实现getModel()
,则会收到Accidental Override
错误。如果Honda
实施getModel()
,则会收到Platform declaration clash
错误。
我可以在Honda
构造函数中更改参数的名称,这样可以解决问题,但感觉就像是一个冗余的getter方法。
interface Car{
fun getModel(): Int
}
class Honda(val modelParam: Int): Car {
override fun getModel() = modelParam
}
有没有更好的方法来实现这样的接口?
答案 0 :(得分:3)
您可以声明properties in interface:
interface Car{
val model : Int
}
然后在实现/构造函数中,您需要添加override
关键字。
class Honda(override val model : Int): Car
答案 1 :(得分:1)
如果接受的答案不适用,因为您无法更改界面,或者界面是Java界面,
class Honda(private val model: Int): Car {
override fun getModel(): Int = model
}
对于Java接口,它仍然可以在Kotlin中以.model
进行访问。