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> 两边都要求:类上界只能有一个且放最前,接口可多个
相关推荐
high一马平川12 小时前
# SystemUI Dagger2 精读 · 第 2 章 @Inject:1200 处构造注入,和 1 处例外
android·java·kotlin
小铁-Android14 小时前
CompletableDeferred:Kotlin 协程中用于一次性挂起通信的工具
android·kotlin
撩得Android一次心动1 天前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
Ehtan_Zheng1 天前
Kotlin 伴生块:Android 项目怎么用,迁移时要注意什么
kotlin
JMchen1 天前
【Jetpack 内核实战 02】ViewModel:生命周期管理与数据持久化核心实战
kotlin·android studio·android jetpack
撩得Android一次心动1 天前
Jetpack Compose 知识点整理3【个人用】
android·笔记·学习·kotlin·android compose
Kapaseker1 天前
别再只会写 <T>:Kotlin 泛型的实战用法
android·kotlin
alexhilton2 天前
Room Fts4:全文搜索替代 SQL LIKE
android·kotlin·android jetpack