我可以像这样捕获类的某个类型参数的类型:
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]]
答案 0 :(得分:1)
scala> case class X[T <: SomeClass : TypeTag]() {
val typ = typeOf[T]
}
defined class X