Kotlin: ¿por qué necesito inicializar una var con getter personalizado?

¿Por qué necesito inicializar una var con un getter personalizado, que devuelve una constante?

 var greeting: String // Property must be initialized get() = "hello" 

No necesito initialization cuando hago greeting de solo lectura ( val )

La razón detrás de esto es el campo de Retroceso . Cuando crea val con un getter personalizado que no utiliza el identificador de campo para acceder a su valor, no se genera el campo de respaldo.

 val greeting: String get() = "hello" 

Si lo hace, el campo de respaldo se genera y debe inicializarse.

 val greeting: String // Property must be initialized get() = field 

Ahora con var. Como el respaldo archivado se genera por defecto, debe inicializarse.

 var greeting: String // Property must be initialized get() = "hello" 

Para que esto funcione para var sin initialization, debe proporcionar un setter personalizado para evitar la generación de campo de respaldo. Por ejemplo:

 var storage: String = "" var greeting: String get() = "hello" set(value) { storage = value} 

Tu código no tiene un setter personalizado, por lo que es equivalente a:

 var greeting: String get() = "hello" set(v) {field = v} // Generated by default 

La implementación pnetworkingeterminada del set usa el field , por lo que debe inicializarlo.

Por la misma lógica, no tiene que iniciar el campo si está debajo de su set ni usarlo (lo que significa que ambos son personalizados):

 var greeting: String // no `field` associated! get() = "hello" set(v) = TODO() 
  • tornadoFX togglebutton no tiene propiedad de text
  • Ignorar ciertas properties al generar equals (), hashCode (), etc.
  • Ejecute testings junit escritas en Kotlin con la anotación @category
  • Borre pasos para importar una biblioteca C nativa en Kotlin usando CLion
  • Manejo de la tecla Enter en EditText (Kotlin, Android)
  • Firebase no obtiene datos del método onDataChange
  • El soporte JUnit experimental en Android + Kotlin no funciona
  • Kotlin - Diferencia entre el bucle "forEachIndexed" y "for in"
  • Android: ¿cómo lograr setOnClickListener en Kotlin?
  • ¿Cómo componer funciones con parmetros / types de resultados compatibles en Kotlin?
  • Netty wss socket socket drops connection