Там в другой шаблон, который вы можете использовать, что не распространяется Перечень, но действует так же:
object MyEnum extends Serializable {
abstract sealed class MyEnum(
val ordinal: Int, val isValid: Boolean
) extends Ordered[MyEnum] with Serializable {
def compare(that: MyEnum) = that.ordinal compare this.ordinal
def toInt: Int = this.ordinal
}
case object Type1 extends MyEnum(0, true)
case object Type2 extends MyEnum(1, true)
case object Type3 extends MyEnum(2, true)
case object Type4 extends MyEnum(3, false)
case object Type5 extends MyEnum(4, false)
case object Type6 extends MyEnum(5, false)
case object Type7 extends MyEnum(6, false)
def fromInt(i: Int): MyEnum = values.find(_.ordinal == i).get
val values = Set(
Type1, Type2, Type3, Type4, Type5, Type6, Type7
)
}
Таким образом, вы можете назначить таким образом, как val myEnum: MyEnum.MyEnum = MyEnum.Type1
аналогично вашему примеру выше, и вы будете иметь доступ к myEnum.isValid
. Аналогично, вы можете получить доступ к нему по порядку с помощью метода fromInt
. Например, MyEnum.fromInt(0).isValid
. Если вы предоставите еще какой-то контекст того, что вы пытаетесь сделать со значениями, я могу предложить лучшее решение. Надеюсь это поможет.
Зачем мне этот номер перечисления? (например, число 0 для первого перечисления) –
@ davidhol это обычно генерируется автоматически для каждого из перечислений, но требуется указать при указании параметра 'name'. Возможно, обратите внимание на этот конкретный вариант использования. Существует также https://github.com/scala/scala/blob/v2.11.7/src/library/scala/Enumeration.scala#L139 ' @param i Целое число, которое идентифицирует это значение во время выполнения. Он должен быть * уникальным среди всех значений перечисления. ' – sam
@ davidhol Я обновил пример, чтобы не указывать индекс, и пусть Enumeration определит его с nextId в перегруженном методе. – sam