如何在指定TypeTag时指定scala类型参数约束

时间:2016-07-28 00:50:24

标签: scala generics

我可以像这样捕获类的某个类型参数的类型:

import scala.reflect.runtime.universe._

case class X[T:TypeTag]() {
   val typ = typeOf[T]
}

但是如果我想强制执行类型约束,我怎么能这样做:

trait SomeClass

case class X[T<:SomeClass]() {
  val typ = typeOf[T]
}

这不起作用:

case class X[T<:SomeClass with TypeTag]() {  // TypeTag takes parameters
  val typ = typeOf[T]
}

两者都没有:

case class X[T<:SomeClass with TypeTag[T]]() {  

  val typ = typeOf[T]
}

X[String]()// type arguments [String] do not conform to method apply's type parameter bounds [T <: SomeClass with reflect.runtime.universe.TypeTag[T]]

1 个答案:

答案 0 :(得分:1)

scala> case class X[T <: SomeClass : TypeTag]() { 
  val typ = typeOf[T] 
}
defined class X