UNRESOLVED_REFERENCE未解析的引用:isInitialized

Jem*_*ili 6 android kotlin

我正在尝试使用Kotlin检查lateinit属性状态的新功能,但是得到了这个编译时错误 Unresolved reference: isInitialized

我已经使用kotlin版本kotlin_version = '1.2.0-beta-31' (android studio版本为3.0)配置我的build.gradle文件,并且还使用相同版本更新了kotlin插件.这是我的代码片段,我正在使用isInitializedcheck.

还包括一个反射库

compile group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.2.0-beta-31'
Run Code Online (Sandbox Code Playgroud)

.

lateinit var k: SomeObjectType
fun instance(): SomeObjectType {
    if (::k.isInitialized) {
        k = SomeObjectType()
    }
    return k
}
Run Code Online (Sandbox Code Playgroud)

nPn*_*nPn 5

这是这里报告的错误并在v1.2-rc-1 中发布

更新: Kotlin 1.2 RC 似乎以“1.2.0-rc-39”的形式提供,所以如果你更新你的插件并使用这个版本,你的问题应该得到解决。

作为在安装 rc-1 之前的一种解决方法,this::在该项目中显示的作品前缀为变量。

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()}")
    }


}
Run Code Online (Sandbox Code Playgroud)

产生:

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)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我留下了我原来的答案,因为它强调了正确的语法在“在线试用”中起作用的事实