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

Kotlin枚举类构造器中var关键字的重要性及原理咨询

Kotlin枚举类构造器参数中var/val的作用问题

初始枚举类代码:

enum class Admin(myName:String, val id:Int, val age:Int){
    ROOT_ADMIN ("Pete", 1, 55),
    ACADEMIC_ADMIN("Jacob",11,56),
    DEPARTMENT_ADMIN("Robin",111,50),
    CLASS_ADMIN("Chris",1111,22)
}

在访问枚举类Admin的对象属性时,输入:

Admin.CLASS_ADMIN.____

原本预期myName会出现在IDE自动补全列表中,但实际并未出现;而带有val关键字的id和age则可以正常显示。

当给myName添加var关键字后,代码修改为:

enum class Admin(var myName:String, val id:Int, val age:Int)

此时myName可以正常出现在自动补全列表中。

问题

此处var关键字的重要性是什么?

备注:已知在构造器中用var或val声明变量时,会在类内部声明对应的属性,但该逻辑如何与此场景关联?


解答

Kotlin里枚举类的构造器参数规则和普通类完全一致:

  • 不带var/val的参数只是构造器的局部变量,仅能在构造器执行过程中使用(比如初始化代码块、属性初始化表达式),不会成为枚举类的成员属性。IDE无法识别这类局部参数为枚举实例的可访问属性,所以不会出现在自动补全列表里。
  • 带var/val的参数会被自动转换为枚举类的成员属性:
    • val会生成只读属性和对应的getter方法;
    • var会生成可读写属性和对应的getter、setter方法。

对应到你的场景:
初始代码中的myName只是构造器局部参数,枚举实例(如CLASS_ADMIN)并没有这个成员属性,因此IDE无法补全;而id和age因为带val修饰,是枚举类的成员属性,所以能被IDE识别并显示在补全列表中。当给myName加上var后,它升级为枚举类的可读写成员属性,IDE就能检测到并将其加入自动补全选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:25:24