Интерфейсная функция сталкивается с Property getter
Имя функции интерфейса конфликтует с именем получателя свойства намеренно, но оно запрещено компилятором из-за случайной проблемы с переопределением. Возможно ли проинструктировать компилятор?
interface A {
fun getFoo()
}
class B: A {
val foo
}
Ответ 1
Эта функция, похоже, не реализована никоим образом.
Вы не можете переопределить Java-методы с помощью свойств Kotlin на данный момент. Было бы неплохо, если бы мы могли его поддержать, но мы не знаем, как это сделать для смешанных иерархий
Это не решает вашу проблему, но, по крайней мере, делает компиляцию кода: вы можете изменить JVM-имя получателя с @JvmName аннотации @JvmName:
interface A {
fun getFoo(): SomeType
}
class B: A {
override fun getFoo() = foo
val foo: SomeType = someValue()
@JvmName("getFoo_") get() = field
}
Также рассмотрите переход к более идиоматическому подходу: определите val -property в своем интерфейсе, чтобы вы могли переопределить его в реализациях:
interface A {
val foo: SomeType
}
class B : A {
override val foo: SomeType = someValue()
}
class C : A {
override val foo: SomeType
get() = someCustomGetter()
}