kotlin - ventas - La función de la interfaz choca con el captador de propiedades.
que es captador de propiedades (1)
El nombre de la función de una interfaz choca intencionalmente con el nombre del captador de una propiedad, pero el compilador lo prohíbe debido a un problema de anulación accidental. ¿Es posible instruir al compilador esto es intencional?
interface A {
fun getFoo()
}
class B: A {
val foo
}
Esta característica parece no estar implementada de ninguna manera.
Comentario de @ AndreyBreslav sobre una pregunta similar :
No se pueden anular los métodos Java con las propiedades de Kotlin en este momento. Sería bueno si pudiéramos apoyarlo, pero no sabemos cómo hacerlo de forma coherente para jerarquías mixtas
Esto no resuelve su problema, pero al menos hace que el código se compile: puede cambiar el nombre JVM del captador con la anotación @JvmName
:
interface A {
fun getFoo(): SomeType
}
class B: A {
override fun getFoo() = foo
val foo: SomeType = someValue()
@JvmName("getFoo_") get() = field
}
También, considere cambiar a un enfoque más idiomático: defina la propiedad- val
en su interfaz, de modo que pueda anularla en las implementaciones:
interface A {
val foo: SomeType
}
class B : A {
override val foo: SomeType = someValue()
}
class C : A {
override val foo: SomeType
get() = someCustomGetter()
}