Scala引用了一个类型参数。

31 浏览
0 Comments

Scala引用了一个类型参数。

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

例如,我想创建一个类,该类获取Enumeration的子类,然后使用它:

我想要的示例:

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:

你知道我该怎么做吗?

0
0 Comments

Scala中出现"Scala Refer to a type parameter"问题的原因是在代码中引用了一个类型参数。解决方法是在类定义中增加一个类型参数的上界,并在类的实例化中传递一个具体的实例。具体的解决方法如下:

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)

不过,对于为什么要这样做,还不太清楚。你能解释一下你想要实现什么吗?你可能需要给`MyEnum1`和`MyEnum2`添加一个额外的共享特质,以便在代码中可以互换使用它们。

更多相关问题,请参考[这个问题](https://stackoverflow.com/questions/11067396)、[这个问题](https://stackoverflow.com/questions/4236251),以及[这个问题](https://stackoverflow.com/questions/1898932)。根据你的使用情况,你可能更喜欢使用sealed case classes。

对于为什么在[T <: Enumeration](val t: T)中添加了`val`,我不确定为什么我添加了`val`!如果你想将`t`作为`UseType`的属性引用,那么需要添加`val`,例如`UseType(MyEnum1).t`。

0