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
相关产品推荐
相关产品推荐

