Scala枚举类型变量创建失败及枚举值获取问题咨询
Scala Enumeration 常见问题解答
问题1:为什么val j:J会报错?
咱们拆解下这两个错误的原因:
not found: type J:你在枚举对象里定义的type J = Value是个内部类型别名,它属于J这个对象的作用域。直接写J的话,编译器找不到这个类型——你得明确告诉它这个类型来自J对象才行。only classes can have declared but undefined members:Scala里顶级变量或局部变量必须初始化,你只声明了val j:J却没赋值,这不符合语法规则,只有抽象类的抽象成员才允许只声明不定义。
给你两种解决写法:
- 直接带上对象前缀指定类型:
val j: J.J = J.Fail - 先导入枚举里的类型别名和成员,简化代码:
import J._ val j: J = J.Fail // 这里的J就代表J.Value类型了
问题2:如何验证Fail的实际值是0?
Scala的Enumeration给每个枚举成员内置了id属性,默认第一个成员的id是0,后续成员依次递增1。你直接访问这个属性就能验证:
// 打印Fail的id println(J.Fail.id) // 控制台会输出0 // 顺便查看Success的id println(J.Success.id) // 输出1
要是需要自定义id,你也可以在定义成员时手动指定,比如val Fail = Value(10),这时候它的id就变成10了。
内容的提问来源于stack exchange,提问作者Manu Chadha
相关产品推荐
相关产品推荐

