我在函數中指定枚舉值類型(實例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