延迟初始化和密封类:
lateinit 关键字(延迟初始化,使用这个有 空指针 风险),解决每个实例都要非空判断
private lateinit var adapter : MsgAdpter
使用:
if(!:: adapter.isInitilized){
adapter = MsgAdapter (msgList)
}
sealed 关键字(密封类,自动检查该密封类有哪些子类,并强制要求你将每一个子类所对应的情况全部处理)通常可以结合RecyclerView 适配器中的ViewHolder一起使用
interface class Result
class Success(val msg: String) : Result()
class Failure( val error : Exception) : Result()
使用:密封类及其子类:只能定义在同一文件的顶层位置,不能嵌套在其他类中
sealed class Result
class Success(val msg: String) : Result()
class Failure( val error : Exception) : Result()
扩展函数和运算符重载:
扩展函数:在不修改某个类源码的情况下,仍然可以打开这个类,向该类添加新的函数
定义结构:(函数名前加 className)
fun ClassName.methodName(param1, Int, params2: Int) : Int {
return 0
}
(最好定义成 顶层方法,这样可以让扩展函数拥有全局的访问域)
定义成了String 类的扩展函数,就自动拥有了String 实例的上下文,
因此不需要再传入字符串参数了
operator : 运算符重载 (允许对同一运算符多次重载)
class Obj{
operator fun plus(obj : Obj) : Obj {
}
}
指定对象
语法糖表达式 对应 实际调用函数
!a ------- a.not
a in b ----- b.contains(a)
基本对象: 扩展函数 + 运算符重载( operator + times(乘法) )