13
接口的函數名稱與屬性的getter名稱有意衝突,但由於意外覆蓋問題,它被編譯器禁止。是否有可能指示編譯器這是故意的?接口的函數與Property的getter衝突
interface A {
fun getFoo()
}
class B: A {
val foo
}
接口的函數名稱與屬性的getter名稱有意衝突,但由於意外覆蓋問題,它被編譯器禁止。是否有可能指示編譯器這是故意的?接口的函數與Property的getter衝突
interface A {
fun getFoo()
}
class B: A {
val foo
}
此功能似乎沒有以任何方式實施。
@上similar question AndreyBreslav的評論:
不能覆蓋Java方法與目前科特林性能。這將是很好,如果我們可以支持它,但我們不知道如何做到這一點始終如一地爲混合層次
這不會解決你的問題,但至少可以使代碼編譯:你可以改變JVM名稱與@JvmName
annotation的吸氣劑:
interface A {
fun getFoo(): SomeType
}
class B: A {
override fun getFoo() = foo
val foo: SomeType = someValue()
@JvmName("getFoo_") get() = field
}
此外,考慮換一個更慣用的方法:在你的界面定義val
- 屬性,這樣就可以在執行其覆蓋s:
interface A {
val foo: SomeType
}
class B : A {
override val foo: SomeType = someValue()
}
class C : A {
override val foo: SomeType
get() = someCustomGetter()
}
UPD:增加了更多的Kotlin-idiomatic方法。 – hotkey