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 | 密封类从编译器的角度保证了不会出现漏写条件的出现 |