我在函数中指定枚举值类型(实例scala.Enumeration
)时遇到问题。这最初源于我需要序列数据库枚举的对象,但我会以下面的例子中有问题的代码:指定枚举值类型的问题
object EnumerationTypes {
class EnumerationProcessor[E <: Enumeration](enum: E, value: E#Value) {
def process: E#Value = {
value
}
}
object Enum extends Enumeration {
type EnumValue = Value
val a = Value(1, "a")
val b = Value(2, "b")
}
case class Obj(val flag: Enum.EnumValue)
def main(args: Array[String]) {
val processor = new EnumerationProcessor(Enum, Enum.a)
val obj = Obj(processor.process)
}
}
这导致以下编译错误:
error: type mismatch;
found : EnumerationTypes.Enum#Value
required: EnumerationTypes.Enum.EnumValue
val obj = Obj(processor.process)
这枚好的工作:
object EnumerationTypesOk {
class EnumerationProcessor[E <: Enumeration](enum: E, value: E#Value) {
def process: E#Value = {
value
}
}
class Enum extends Enumeration {
type EnumValue = Value
val a = Value(1, "a")
val b = Value(2, "b")
}
object Enum extends Enum
case class Obj(val flag: Enum#EnumValue)
def main(args: Array[String]) {
val processor = new EnumerationProcessor(Enum, Enum.a)
val obj = Obj(processor.process)
}
}
但我不希望我的代码是这个样子的(先定义类,然后它的单一实例)。
所以问题:我怎么能让value
类型正好是enum.EnumValue
?虽然看起来不可能,因为类型不能取决于具体的值,也许有一些技巧可以实现预期的效果,而不需要额外的样板。
相关问题在scala用户邮件列表中:http://scala-programming-language.1934581.n4.nabble.com/Making-combinations-td3017320.html – 2010-10-28 19:31:15
您的解决方案版本1似乎在scala中工作正常2.11.7 – qed 2016-02-11 19:27:30