天天看点

【kotlin】Kotlin笔记14-延迟初始化和密封类(lateinit,sealed)

Kotlin笔记14-延迟初始化和密封类

8.1 延迟初始化和密封类

  • 延迟初始化
lateinit: 针对编译器

​Example:​

private var adapter: MsgAdapter? = null
//优化->
private lateinit var adapter : MsgAdapter      

判断一个变量是否完成了初始化

if(!::adapter.isInitialized){
  adapter = MsgAdapter(msgList)
}      
序号 Tips
::adapter.isInitialized固定写法 判断adapter是否进行初始化
  • 密封类

​Example:​

interface Result
class Success(val msg:String):Result
class Failure(val error:Exception):Result

fun getResultMsg(result: Result)=when(result){
    is Success->result.msg
    is Failure->result.error.message
    else -> throw IllegalArgumentException()//这里
}      
序号 Tips
1 为了满足编译器要求而去编写无用条件分支
sealed class

​改写:​

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

fun getResultMsg(result: Result) = when (result) {
    is Success -> result.msg
    is Failure -> result.error.message
}      
序号 Tips
1 密封类从编译器的角度保证了不会出现漏写条件的出现