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> 两边都要求:类上界只能有一个且放最前,接口可多个
相关推荐
传奇开心果编程11 小时前
【Jetpack Compose娓娓道来】第36课:焦点管理与键盘输入——让遥控器、键盘和输入法都“找得到北”
android·kotlin·移动开发·交互·android jetpack·ui框架·声明式ui
hai_android12 小时前
AudioTrack 深度解析:从原理到实战
android·java·kotlin
红尘伴蝶舞12 小时前
从秒开优化到连环崩溃:深入剖析 ViewPager2 在常驻 DialogFragment 中的复用陷阱与自愈方案
android·kotlin
YB137518 小时前
kotlin中闭包特性
kotlin
alexhilton1 天前
2027 Android 开发者路线图:学习、面试与 AI
android·kotlin·android jetpack
灿飞屋2 天前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
唐青枫2 天前
Kotlin 对象声明与对象表达式详解
kotlin
灿飞屋2 天前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
金銀銅鐵2 天前
同一个 Hello World,Kotlin 和 Java 在字节码层面差在哪
jvm·后端·kotlin
Nerd(BUG版)4 天前
KMP学习day4--Kotlin空安全与泛型
学习·安全·kotlin