Kotlin 内部类
默认静态内部类
在 Kotlin 中,你直接在一个类里写另一个类,它默认就是静态的。
它不持有外部类的引用
调用方便: * 外部调用: Outer.Inner()。直接 new(当然kotlin没有这个关键字),不需要先创建外部类对象
它拿不到外部类的 this(实例变量),只能访问外部类的静态成员(companion object 里的东西)
不完全是静态的,加了@JvmStatic才会生成一样的静态的字节码
而且都这样了,为什么不直接写外面,非要写个内部类
非静态内部类 (需加 inner 关键字)
它会持有一个指向外部类的引用(this@Outer)
如果内部类在跑耗时任务,外部 Activity 关了也跑不掉,内存直接炸
特权: 它可以随意访问外部类的所有私有变量。
调用麻烦
val o = Outer()
o.Inner()
实际上,这种拓展功能的东西,应该用接口写
Elvis 操作符 (?: )
这个操作符的名字来源于它的形状像猫王 ~(Elvis Presley~ 听起来像榴莲 的侧脸发型
用法
Kotlin
val result = 可能为空的变量 ?: 默认值
val result = A ?: B。如果 A 不为 null,则 result = A;如果 A 为 null,则 result = B。
如果左边不是null返回左边
如果左边是null返回右边
配合返回/抛错: ```kotlin
val name = user.name ?: return false // 如果没名字就直接退出方法
val id = user.id ?: throw IllegalArgumentException("Missing ID") // 没 ID 就报错
