lateinit property xxx has not be

2020-07-24  本文已影响0人  钢镚koala

搜索各方资料。共有以下几种办法解决。
1、一个是判断初始化状态;

if(::strs.isInitialized)
{}
class Foo {
    lateinit var lateInitVar: String
    fun checkInit() {
        if(this::lateInitVar.isInitialized){  //重要,this::前缀是必须的。
         //如果已经初始化了,返回true       }
    }
}

2、第二种就是防止重新创建视图,到时初始化失败的做法。

/**
     * 避免重新创建后导致未初始化问题
     */
   @SuppressLint("MissingSuperCall")
    override fun onSaveInstanceState(outState: Bundle?) {
    }

3、替换lateinit字段

 val person: Person by lazy { Person(this) }

//1.尝试 by lazy

 val itemFragments = ArrayList<BaseFragment>()

//2.直接在类变量种初始化对象

//3.让你的逻辑判断lateinit 有没有初始化

internal var context: Context

//4.也可以通过 internal var 来定义类变量

var  student:Student?=null

//5.初始化为空的变量,使用?.run{} let,apply,with

上一篇 下一篇

猜你喜欢

热点阅读