class Parent[T: ClassTag] {
}
class Child[U: ClassTag, T: ClassTag] extends Parent[T] {
}
val o: Parent[_] = new Child[Int, String]
在给定o(注意它的类型Parent[_])的情况下,假设您知道o的类型是Child,那么是否有可能得到T和U的实际类型?我已经尝试了一些基于运行时解析使用scala 2.10反射的类型参数的事情,但到目前为止还没有运气。
如果您稍微修改了Parent
和Child
(请注意,: ClassTag
符号除了val
之外基本上是相同的,因此它不会给隐式参数命名或使其从类外可访问)
class Parent[T](implicit val tTag: ClassTag[T]) {
}
class Child[U, T](implicit override val tTag: ClassTag[T], val uTag: ClassTag[U]) extends Parent[T] {
}
那么你可以做
val tTag = o.tTag // ClassTag[String]
当然,如果你需要uTag
,你必须转换:o.asInstanceOf[Child[_, _]].uTag
,但它会工作
假设你知道0的类型是Child