在同一级别定义Enumeration对象和值类

时间:2012-01-22 12:49:06

标签: scala

是否可以在Scala中的同一级别声明一个Enumeration对象和类?

我从这开始,但我不确定注册实例的最佳方式是什么。

object Gender extends Enumeration {
  val MALE = new Gender(0)
  val FEMALE = new Gender(1)
}

class Gender(val id: Int) extends Gender.Value {

}

这样做的动机是我不想将enum类称为Gender.Gender,而是将Gender引用。

1 个答案:

答案 0 :(得分:3)

这有效:

object Gender extends Enumeration {
    val male   = new Gender
    val female = new Gender

    class Sneaky extends Val(nextId, null)
}

class Gender extends Gender.Sneaky

> println(Gender.values)
Gender.ValueSet(male, female)

但是我并没有真正感觉良好。我认为它会更好 创建一个类型别名(如果你可以在这个范围内):

object Gender extends Enumeration {
    ...
}

type Gender = Gender.Value

import使用前的类型:

object Gender extends Enumeration {
    val male, female = Value

    type Gender = Value
}

import Gender._
val x: Value = male

(或者,如果可以,请使用案例类)。