UNRESOLVED_REFERENCE Referencia no resuelta: isInitialized

Intento utilizar la nueva function de Kotlin para verificar el estado de la propiedad lateinit, pero obtuve este error de time de compilation Unresolved reference: isInitialized

He configurado mi file build.gradle con la versión de kotlin_version = '1.2.0-beta-31' de kotlin_version = '1.2.0-beta-31' (la versión de android studio es 3.0) y también he actualizado el complemento de kotlin con la misma versión. este es mi fragment de código, donde estoy usando isInitialized check.

también tenía una biblioteca reflejada incluida

 compile group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.2.0-beta-31' 

.

 lateinit var k: SomeObjectType fun instance(): SomeObjectType { if (::k.isInitialized) { k = SomeObjectType() } return k } 

Este es un error como se informa aquí y se lanza en v1.2-rc-1

Actualización: Kotlin 1.2 RC parece estar disponible como '1.2.0-rc-39', por lo que si actualiza su complemento y utiliza esta versión, su problema debería resolverse.

Como solución alternativa hasta que instale rc-1, el prefijo de la variable con this:: funciona como se puede mostrar en este proyecto.

 package com.example.john.so2 import android.support.v7.app.AppCompatActivity import android.os.Bundle data class SomeObjectType(val value: String) lateinit var k: SomeObjectType class MainActivity : AppCompatActivity() { lateinit var k: SomeObjectType fun instance(): SomeObjectType { if (this::k.isInitialized) { return k } else { return SomeObjectType("k was not initialized") } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) println("instance = ${instance()}") k = SomeObjectType("k was initialized") println("instance = ${instance()}") } } 

cuyos performances:

 11-03 19:31:14.496 31982-31982/com.example.john.so2 I/System.out: instance = SomeObjectType(value=k was not initialized) 11-03 19:31:14.496 31982-31982/com.example.john.so2 I/System.out: instance = SomeObjectType(value=k was initialized) 

Por cierto, dejé mi respuesta original ya que resalta el hecho de que la syntax correcta funciona en "try-online"

¿Es tu código un código de Kotlin válido? Intenté lo siguiente y pareció funcionar como se esperaba.

 data class SomeObjectType(val value: String) lateinit var k: SomeObjectType fun instance(): SomeObjectType { if (::k.isInitialized) { return k } else { return SomeObjectType("k was not initialized") } } fun main(args: Array<String>) { println("inst = ${instance()}") k = SomeObjectType("was initialized") println("inst = ${instance()}") } 

produciendo:

 inst = SomeObjectType(value=k was not initialized) inst = SomeObjectType(value=was initialized) 

Cuando intenté con lo que tienes arriba: (con la class SomeObjectType() agregada class SomeObjectType()

 class SomeObjectType() lateinit var k: SomeObjectType fun instance(): SomeObjectType { if (::k.isInitialized) { instance = SomeObjectType() } return instance } 

se queja de la línea instance = SomeObjectType() y la línea de return instance , que creo que tiene sentido para mí. La línea 5 es la instance = SomeObjectType() y la línea 7 es la línea de return instance .

 Error:(5, 8) Function invocation 'instance()' expected Error:(5, 8) Variable expected Error:(7, 11) Function invocation 'instance()' expected 

Aquí están los enlaces a los ejemplos en línea. ejemplo de trabajo , ejemplo roto

  • MVP Presenter no se inyectó correctamente
  • Kotlin: ¿Cómo puedo crear una function henetworkingable "estática"?
  • Kotlin, JPA y campos booleans
  • Devolución de instancias específicas de la function genérica
  • El operador de Kotlin Reflection obtiene la implementación
  • MyBatis con classs de datos inmutables en Kotlin
  • Encuadernación con vista de Android Kotlin: findViewById vs Butterknife vs Kotlin Android Extension
  • Cómo probar el observador?
  • La anotación de ButterKnife @OnClick no funciona en el fragment de Kotlin
  • Kotlin - reference no resuelta por constante
  • ¿Es posible get un tipo de subclass Kotlin dentro de una superclass?