interface - crear - Overriding val definido en la interfaz mediante el uso de var con el mismo nombre definido en la superclase
como crear una interfaz en sap (2)
Kotlin no permite que las propiedades val
anulen las propiedades var
.
Lo más cercano que funcionará:
open class Base(protected open var id: Int) {}
interface ProviderI {
val id: Int
}
class Instance(id: Int): Base(id), ProviderI {
override var id: Int = 0
get() { return super.id }
}
Hay una clase Base ( var necesita permanecer protegido):
open class Base(protected var id: Int) {}
Hay una interfaz que necesita usar val :
interface ProviderI {
val id: Int
}
También hay una clase que hereda de Base e implementa la interfaz ProviderI . Dentro de lo cual estoy tratando de implementar el val de la interfaz usando la superclase var (que tiene el mismo nombre). Como ejemplo que no funciona, intento hacer algo como eso (el ejemplo no funciona):
class Instance(id: Int): Base(id), ProviderI {
override val id
get() { return super.id }
}
La idea es simple, pero lo he intentado todo y cada vez que se informa un error diferente.
Para anular un miembro que está presente en varios supertipos, Kotlin requiere que esté open
en todos los supertipos , y esta restricción parece bastante natural, ya que de lo contrario los miembros final
podrían anularse fácilmente de esta manera.
La solución es hacer que la id
abra también en Base
y anularla como una propiedad var
:
open class Base(protected open var id: Int)
interface ProviderI {
val id: Int
}
class Instance(id: Int): Base(id), ProviderI {
override var id: Int
get() = super.id
set(value) { super.id = value }
}