Kotlin文档中枚举values()方法用法位置及values()[]写法疑问
关于Kotlin枚举
values()方法及values()[]写法的说明 你代码中用到的values()是Kotlin为每一个枚举类默认生成的方法,它会返回一个按定义顺序排列、包含该枚举所有常量的数组。
你没见过的values()[]是Kotlin支持的简化链式调用,本质是两步操作的合并:
- 先调用
values()得到枚举常量数组 - 直接用数组下标访问语法
[]读取对应位置的枚举值,不需要额外把values()的返回值赋值给中间变量
结合你的代码具体解释
你定义的Seat枚举有4个常量,按定义顺序对应的ordinal(枚举内置的序号属性,从0开始计数)分别是:
- Coach → 0
- Premium → 1
- Business → 2
- First → 3
upgrade()方法里的逻辑等价于下面的展开写法:
fun upgrade(): Ticket { // 先拿到所有Seat枚举的数组 val seatArray = Seat.values() // 计算升一级后的序号,最大不超过First的序号3,避免数组越界 val targetIndex = (seat.ordinal + 1).coerceAtMost(First.ordinal) // 从数组中取出对应序号的枚举值 val newSeat = seatArray[targetIndex] return Ticket(name, newSeat) }
你写的values()[计算出来的下标]就是上面代码的简化写法,功能完全一致。
补充说明
正常在枚举类外部调用该方法需要加枚举类名前缀,标准写法为Seat.values()。你这段代码中可以直接省略前缀写values(),是因为当前代码处于Seat枚举的可见作用域内,编译器可以自动推导对应的枚举类。
内容的提问来源于stack exchange,提问作者ntos
相关产品推荐
相关产品推荐

