Kotlin-Learning Day5

延迟初始化和密封类

延迟初始化

关键字lateinit

private layeinit val adapter:MsgAdapter

这样就告诉编译器,这个变量待会再进行初始化,这样就免去了每个全局变量都要初始化为null的麻烦。

但是一旦用了没有初始化的变量就会出错,所有可以加一个if语句判断其是否有初始化

if(!::adapter.isInitialized)
{
...
}

::adapter. isInitialized,这个语法是用来判断是否已经初始化的。

密封类优化代码

密封类关键字sealed,加在类前。密封类,顾名思义,被密封的类,其子类是被保护的。

大部分应用场景在。使用when时,一般情况下除了可能出现的几种情况,还需要多写一个else,这样会导致若传进去的参数是Unknown的,系统会直接报错崩溃,但是并不会提示是这里的问题。

密封类就很好的解决了这个问题!

when() 括号中的参数为密封类时,系统会强制检查该类有哪些子类,强制限定你将每一个子类的情况处理,这样就必不可能出现else的情况。

实际应用例子:优化MsgAdapter

  
sealed class MsgAdapter(val msgList:List<Msg>): RecyclerView.Adapter<RecyclerView.ViewHolder>() {  
    inner  class LeftViewHolder(view: View): RecyclerView.ViewHolder(view) {  
        val leftMsg :TextView = view.findViewById(R.id.leftMsg)  
    }  
    inner class RightViewHolder(view: View):RecyclerView.ViewHolder(view){  
        val rightMsg:TextView = view.findViewById(R.id.rightMsg)  
    }
    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {  
 val msg = msgList[position]  
    when(holder){  
        is LeftViewHolder -> holder.leftMsg.text = msg.content  
        is RightViewHolder -> holder.rightMsg.text = msg.content  
    }  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值