Scala 在同一级别上定义枚举对象和值类

Scala 在同一级别上定义枚举对象和值类,scala,Scala,是否可以在Scala中声明同一级别上的枚举对象和类 我从这里开始,但我不确定注册实例的最佳方式是什么 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。这样做: obje

是否可以在Scala中声明同一级别上的枚举对象和类

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

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。

这样做:

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 {
    val male, female = Value

    type Gender = Value
}

import Gender._
val x: Value = male

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

对象不是类的实例,因此不能对其应用
new
?是的,但new-Gender指的是类而不是对象,此代码将编译,枚举常量将可访问,但枚举将不知道它们感谢您的建议。在这种情况下,不能使用类型别名或导入。
object Gender extends Enumeration {
    val male, female = Value

    type Gender = Value
}

import Gender._
val x: Value = male