Kotlin 三类关键字

类型 例子 能否当标识符 说明
硬关键字 Hard keywords as break class continue do else false for fun if in !in interface is !is null object package return super this throw true try typealias typeof val var when while ❌ 不能 任何位置都被解析为关键字,语法上无法用作标识符
软关键字 Soft keywords by catch constructor delegate dynamic field file finally get import init param property receiver set setparam value where ✅ 能 只在特定语法语境中才是关键字;出现在普通标识符位置(如变量名)时就是普通名字
修饰符关键字 Modifier keywords abstract actual annotation companion const crossinline data enum expect external final infix inline inner internal lateinit noinline open operator out override private protected public reified sealed suspend tailrec vararg ⚠️ 基本能 只有当它出现在修饰符位置(紧跟声明/类型)时才按修饰符解析;其他上下文可作标识符

软关键字只在特定语法位置被当作关键字,其余位置可以当普通标识符用:

编译器不是靠"认出这个词"来区分,而是靠语法位置:出现在类型参数列表后面、声明末尾,就是约束关键字;出现在标识符该出现的地方,就是普通名字。

软关键字 where

where 是 Kotlin 声明泛型上界约束的语法,用途是限制类型参数必须是哪些类型的子类型。

一个约束时

复制代码
// 单约束,直接写在尖括号里
fun <T : CharSequence> foo(t: T) = t.isEmpty()

多个约束时:必须用 where

复制代码
fun <T> foo(t: T) where T : CharSequence, T : Comparable<T> { }
//                      └──────────┬──────────┘
//                    T 必须同时满足两个上界(且关系,不是或)

Java 对照

类型 Java Kotlin 说明
单约束 <T extends CharSequence> <T : CharSequence> 两者都是"上界"(upper bound),冒号与 extends 等价
多约束 <T extends CharSequence & Comparable<T>> <T> ... where T : CharSequence, T : Comparable<T> Java 用 & 连接;Kotlin 的 <T> 里只能写一个上界 ,多个约束必须写在 where 子句中
类+接口混用 <T extends Number & Comparable<T>> <T : Number> ... where T : Comparable<T> 两边都要求:类上界只能有一个且放最前,接口可多个
相关推荐
mmsx7 小时前
Android 状态保持:进程被杀、旋屏与后台任务的存活术
android·kotlin
传奇开心果编程20 小时前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
花开路口1 天前
线程安全完全指南:从 Java 到 Kotlin,一文吃透并发编程
java·kotlin
hai_android1 天前
子 View 被压小时,如何向父容器"告状"?——MEASURED_STATE_TOO_SMALL 向上传递机制
android·kotlin·android jetpack
怪奇云呼军1 天前
从 ElevenLabs 看工具调用:闪电智能 Voice Agent 的企业集成验收设计
android·大数据·运维·服务器·网络·人工智能·kotlin
mmsx1 天前
Android UI 复用体系:泛型基类、骨架与插槽
android·kotlin
alexhilton2 天前
生命周期感知的多模块启动模式
android·kotlin·android jetpack
hai_android2 天前
LruCache 图片浏览器内存缓存
android·java·kotlin
mmsx2 天前
Android 自定义 View 三关:触摸分发、绘制与坐标错位
android·kotlin
JMchen2 天前
自定义View在复杂业务场景中的实战
android·kotlin·canvas