在 scala 2.10 中获取 child 的通用类型

Get generic types of child in scala 2.10

class Parent[T: ClassTag] {
}

class Child[U: ClassTag, T: ClassTag] extends Parent[T] {
}

val o: Parent[_] = new Child[Int, String]

给定 o 是否有可能获得 TU 的实际类型(注意它的类型 Parent[_]),假设你知道 o 的类型是 Child ?

我已经尝试了一些基于 Runtime resolution of type arguments using scala 2.10 reflection 的东西,但到目前为止没有运气。

如果稍微修改ParentChild(注意: ClassTag符号除了val外基本相同,所以它没有给名字隐式参数或使其可从 class)

外部访问
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,但它会起作用

assuming you know o is of type Child