¿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() } } 
  • Una variable no puede asignarse a 2
  • Kotlin sort array por valor en range
  • El valor de configuration de Proto3 igual al pnetworkingeterminado no se reconoce en el time de ejecución
  • La relación entre la interfaz compartida en Java y Kotlin (por ejemplo: Lista <>)
  • ¿Las corutinas son solo azúcar sintáctico para los manipuladores de finalización?
  • java.lang.IllegalStateException: files Dex: configuration de la extensión .DEX solo para files .CLASS
  • Reproductor de video flotante de estilo Youtube
  • Vaadin 8 NativeSeleccione la representación de datos modificados de la list
  • Constructor de class de datos con dos constructores diferentes en Kotlin
  • Integración de HTML y CSS con Kotlin y Spring MVC
  • Kotlin encadena el performance de las funciones de colección