美文网首页
kotlin中延迟初始化和密封类

kotlin中延迟初始化和密封类

作者: 别看后面有人 | 来源:发表于2021-06-25 22:00 被阅读0次

1、对变量延迟初始化
当代码中出现越来越多的全局变量实例时,需要大量的判空处理代码,否则编译无法通过,对于这个问题的解决办法时对全局变量进行延迟初始化。延迟初始化用关键字lateinit,使用延迟初始化就不需要在一开始的时候将它赋值为null了,例如之前的适配器代码,在adapter变量的前面加上lateinit关键字,这样在一开始的时候就不需要赋值null,同时因为ChatAdapter是不可为空的类型,所以在onclick()方法中也就不需要进行判空处理,直接调用adapter的任何方法就可以。

class ChatActivity:AppCompatActivity(),View.OnClickListener{
   private val msgList=ArrayList<MsgDatas>()
//   private var adaper:ChatAdapter?=null
    private lateinit var adaper:ChatAdapter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.chat_layout)

        initData()
        btnsend.setOnClickListener(this)
       ...
          adaper =ChatAdapter(msgList)
     

    }

    override fun onClick(v: View?) {
        when(v){
            btnsend ->{
               .....
                  //  adaper?.notifyItemInserted(msgList.size-1)
                    adaper.notifyItemInserted(msgList.size-1)
                ....
                }
            }
        }
    }

需要注意的是,在使用关键字lateinit的时候一定要确保在调用之前就完成了初始化公众,否则kotlin无法保证程序的安全性,另外,我们也可以通过代码来判断一个全局变量是否已经完成了初始化,这样就能避免重复对一个变量进行初始化操作,::daper.isInitialized用于判断adapter变量是否已经初始化

class ChatActivity:AppCompatActivity(),View.OnClickListener{
   private val msgList=ArrayList<MsgDatas>()
//   private var adaper:ChatAdapter?=null
    private lateinit var adaper:ChatAdapter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.chat_layout)
        ....
          if(!::adaper.isInitialized){
            adaper =ChatAdapter(msgList)
        }
        
    ...
    }

2、使用密封类优化代码
密封类的关键字sealed class,密封类是可继承类,代码如下:

sealed class Result {
    class Success(val msg:String):Result()
    class Failure(val error:String):Result()
}

调用的时候:

 fun getResult(result: Result)=when(result){
        is Result.Success ->result.msg
        is Result.Failure ->result.error
    }

相关文章

网友评论

      本文标题:kotlin中延迟初始化和密封类

      本文链接:https://www.haomeiwen.com/subject/lwpoyltx.html