0
点赞
收藏
分享

微信扫一扫

【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

密封类从编译器的角度保证了不会出现漏写条件的出现

2

密封类及其所有子类只能定义再=在同一个文件的顶层位置,不能嵌套咋其他类中


举报

相关推荐

Kotlin 密封类和接口

0 条评论