13
インターフェイスの関数名がプロパティのゲッタ名と意図的に衝突しますが、偶発的なオーバーライドの問題によりコンパイラで禁止されています。これは意図的なコンパイラに指示することは可能ですか?Interfaceの関数がPropertyのゲッターと衝突する
interface A {
fun getFoo()
}
class B: A {
val foo
}
インターフェイスの関数名がプロパティのゲッタ名と意図的に衝突しますが、偶発的なオーバーライドの問題によりコンパイラで禁止されています。これは意図的なコンパイラに指示することは可能ですか?Interfaceの関数がPropertyのゲッターと衝突する
interface A {
fun getFoo()
}
class B: A {
val foo
}
この機能は実装されていないようです。あなたは、現時点ではKotlinのプロパティを持つJavaメソッドをオーバーライドすることはできません
:similar questionにAndreyBreslavさんのコメント@
。我々はそれをサポートすることができればいいだろうが、我々はあなたの問題を解決していません混在階層
これをするためにそれを一貫して行う方法を知りませんが、少なくとも、コードのコンパイルを行いますあなたが変更することができます@JvmName
annotationとゲッターのJVM名:
interface A {
fun getFoo(): SomeType
}
class B: A {
override fun getFoo() = foo
val foo: SomeType = someValue()
@JvmName("getFoo_") get() = field
}
また、より多くの慣用的なアプローチに変更することを検討:あなたは、実装でそれをオーバーライドすることができるように、あなたのインタフェースでval
-propertyを定義します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