Scala请参阅类型参数

时间:2014-03-31 15:01:19

标签: scala

有没有办法引用类型参数?

例如,我想创建一个获得Enumeration的Sub类而不是使用他的类: 我想要的例子:

class MyEnum1 extends Enumeration{
    type MyEnum=Value
    a1=Value("A1")
    b1=Value("B1")
}

class MyEnum2 extends Enumeration{
    type MyEnum=Value
    a2=Value("A2")
    b2=Value("B2")
}


class UseType[T:<Enumeration]{
    val values=T.values
}

你知道我该怎么办?

1 个答案:

答案 0 :(得分:2)

我认为您需要在对象级别而不是类型级别工作,并将实例(可以是单个对象)传递到您的类中:

object MyEnum1 extends Enumeration {
  type MyEnum1 = Value
  val a1 = Value("A1")
  val b1 = Value("B1")
}

object MyEnum2 extends Enumeration {
  type MyEnum2 = Value
  val a2 = Value("A2")
  val b2 = Value("B2")
}

class UseType[T <: Enumeration](val t: T) {
  println(t.values)
}

new UseType(MyEnum1)              //> MyEnum1.ValueSet(A1, B1)
new UseType(MyEnum2)              //> MyEnum2.ValueSet(A2, B2)

我不太确定你为什么要这样做,但是 - 你能解释一下你想要实现的目标吗?您可能需要为MyEnum1MyEnum2提供额外的共享特征,以便它们在您的代码中互换使用?

另请参阅this questionthis one以及this one - 根据您的使用情况,您可能更愿意使用密封案例类。