Accediendo al campo de una instancia diferente de la misma class en Kotlin

Considera este código de Kotlin:

var parent: T? = null get() = if (isParent) this as T else field set(value) { field = if (value == null) null else value.parent } val isParent: Boolean get() = parent == null var description = "" get() = if (isParent) field else parent!!.description set(value) { if (isParent) field = value else parent!!.description = value } 

Suponga que isParent devuelve true si esta instancia es una instancia parent . Si no, getParent() devolverá la instancia principal. En Java, puedes acceder directamente al campo de una instancia diferente de la misma class, como esta:

 String getDescription() { return getParent().description; } void setDescription(String value) { getParent().description = value; } 

(No digo que sea lo mejor que puedo hacer, lo simplifiqué para la demostración). Comparando con Java, sería bueno poder hacer lo siguiente:

 var description = "" get() = parent.field set(value) { parent.field = value } 

Sin embargo, esto no funciona y, lamentablemente, hace que el código sea less legible. Especialmente si tiene muchas de esas variables, que están vinculadas a este elemento parent .

Solo se puede acceder a un campo de respaldo de una propiedad desde un getter o setter de esa propiedad, y solo para la instancia en la que se ha invocado el getter o setter. Si necesita proporcionar múltiples forms de acceder a un atributo de una class, necesita definir dos properties distintas, una de las cuales tiene un campo de respaldo para almacenar los datos y otra tiene un getter y un setter que hacen reference a la primera propiedad.

 class Foo { var parent: Foo? = null val parentOrSelf: Foo get() = parent ?: this private var _description: String? = null var description = "" get() = parentOrSelf._description set(value) { parentOrSelf._description = value } } 
  • Explicar por qué mostrar Advertencia Desmarcada invocar source.readArrayList (data !!. JavaClass.classLoader) como ArrayList <Data>?
  • ¿Cómo comparar dos matrices en Kotlin?
  • Nombre de image dibujable inaccesible en Kotlin?
  • Kotlin - Clase de fábrica con problemas de properties
  • Diseño sintético y personalizado de Kotlin en DialogFragment
  • HttpException no capturado por onError ()
  • escriba un literal integer hexadecimal igual a Int.MIN_VALUE en Kotlin
  • Serialización Singleton en Kotlin
  • ¿Cuál es el propósito de la palabra key `externa` en Kotlin?
  • Android ViewModelProviderFactory en kotlin
  • ¿Los types reificados de Kotlin son incorrectos para los primitivos en la JVM?