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> 两边都要求:类上界只能有一个且放最前,接口可多个
相关推荐
撩得Android一次心动9 小时前
Jetpack Compose 知识点整理1【个人用】
android·学习·kotlin·android jetpack·compose
ForteScarlet11 小时前
Kotlin 2.4.20 现已发布,新特性多不多?
android·java·开发语言·开源·kotlin·jetbrains
JMchen12311 小时前
Cursor高阶玩法:.cursorrules编写与Spec-Driven开发实战,把AI调教成专属结对编程搭档
人工智能·vscode·kotlin·cursor·结对编程·spec-driven·.cursorrules
hai_android15 小时前
Kotlin 协程作用域源码剖析
android·kotlin
leluckys19 小时前
【KMP】-KMP 项目commonMain、androidMain、iosMain 到底放什么?
kotlin
JMchen12320 小时前
2026年六款主流AI编程工具深度实测:Cursor、Copilot、Claude Code等对比与选型思考
android·kotlin·copilot·ai编程·开发工具·cursor·claude code
hai_android20 小时前
Kotlin 协程上下文:从 plus 到 CombinedContext,彻底搞懂左偏结构
android·kotlin
Android打工仔2 天前
Kotlin 协程源码解析(七)`delay()` 到底是如何在 `Dispatchers.Main` 上恢复的?
android·kotlin
Kapaseker2 天前
适配小米“中”折屏,非得买一台吗
android·kotlin