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