¿Hay alguna manera de anular una propiedad setter en extender class en Kotlin?

class A { var selectedColor: Int get() = selectedColor set(selectedColor) { this.selectedColor = selectedColor doSomething() } } class B : A { override var selectedColor: Int get() = selectedColor set(selectedColor) { this.selectedColor = selectedColor doSomethingElse() } } 

la anulación de palabra key muestra un error que indica que 'selectedColor' es final y no se puede anular. ¿Hay algo que este olvidando?

Para hacerlo, debe marcar tanto la class A como la propiedad como open ( son final por defecto ):

Además, sus getters se escriben como get() = selectedColor y los setters tienen this.selectedColor = selectedColor assignments, que en realidad son ambas llamadas recursivas al mismo acceso, lo que dará lugar a StackOverflowError . Para acceder al valor del campo de respaldo , use get() = field y field = ... lugar.

 open class A { open var selectedColor: Int = someDefaultValue get() = field set(value) { field = value doSomething() } } 

Luego puede override la propiedad, y si desea que el comportamiento del getter no se modifique, puede llamar a super.selectedColor :

 class B : A() { override var selectedColor: Int = someDefaultValue get() = super.selectedColor set(value) { field = value doSomethingElse() } } 

Si desea llamar al colocador de la superclass, use super.selectedColor = value lugar de field = value .

Necesita configurar su var selectedColor para abrir. Creo que esta bien

Me gusta esto :

 class A { open var selectedColor: Int get() = selectedColor set(selectedColor) { this.selectedColor = selectedColor doSomething() } } 
  • Kotlin no selecciona los identificadores de resources
  • Error de complemento: Kotlin lanzó una NoReadAccessException no detectada
  • Retrofit-Vertx con RxJava2 en Kotlin IllegalStateException message == null
  • Error de generación transformClassesWithDesugar después de actualizar a AS 3.0 Canary 6
  • ¿Cómo se transfiere a una interfaz / class de la class Kotlin de String?
  • Guice MapBinder
  • Kotlin, JPA y campos booleans
  • Kotlin Coroutines con time de espera
  • ¿Cómo ejecutar las testings de Spek desde la command-line?
  • Kotlin utiliza aserciones de time de ejecución para la comprobación nula - ¿Sobrecarga de performance?
  • Usar Kotlin en un module de biblioteca sin usarlo en el module de la aplicación