Kotlin 内部类默认静态 Elvis 操作符

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 就报错

posted @ 2026-04-22 00:29  气温骤降  阅读(10)  评论(0)    收藏  举报