天天看點

【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 密封類從編譯器的角度保證了不會出現漏寫條件的出現