You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin枚举类中三种调用常量名称方法的区别及用法

Kotlin枚举类三种写法的区别

这三个表达式虽然打印结果相同,但它们的本质、返回类型和适用场景有明显区别:

1. Direction.valueOf("NORTH")

  • 这是枚举类自带的静态工具方法,作用是通过枚举常量的名称字符串,反向获取对应的枚举实例。
  • 返回类型是Direction枚举实例,println时会调用枚举默认的toString()方法,而枚举默认toString()返回的就是实例的name属性值,所以打印出NORTH。
  • 注意:如果传入的字符串没有对应的枚举常量(比如传"NORTH1"),会直接抛出IllegalArgumentException。
  • 适用场景:当你只有字符串形式的枚举名称时(比如从配置文件、接口返回值中拿到的字符串),需要把它转换成枚举实例的时候用。

2. Direction.NORTH

  • 这是直接引用枚举类的常量实例,是获取枚举实例最直接、最常用的方式。
  • 返回类型是Direction枚举实例,同样因为println调用默认toString(),所以输出NORTH。
  • 适用场景:在代码中明确知道要使用哪个枚举常量时,直接引用即可,类型安全且性能最优。

3. Direction.NORTH.name

  • 这是访问枚举实例自带的**name属性**,每个枚举实例都默认拥有这个属性,它的值就是定义枚举常量时的标识符(也就是NORTH这个字符串)。
  • 返回类型是String,所以println直接输出这个字符串值。
  • 适用场景:当你需要获取枚举常量的名称字符串时使用,比如要把枚举名称存到数据库、或者作为参数传递给需要字符串的方法时。

举个更直观的例子区分三者:

fun main() {
    // valueOf得到实例,能访问枚举的自定义属性direction和distance
    val northInstance = Direction.valueOf("NORTH")
    println(northInstance.distance) // 输出20

    // 直接引用实例,同样能访问自定义属性
    println(Direction.NORTH.direction) // 输出North

    // name只是字符串,无法访问枚举的自定义属性
    val northName = Direction.NORTH.name
    // println(northName.distance) // 编译报错,String没有distance属性
}

内容的提问来源于stack exchange,提问作者sayang_android

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:05:33