在scala 2.10中获取泛型类型的子项

时间:2015-07-24 18:04:03

标签: scala reflection

class Parent[T: ClassTag] {
}

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

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

是否可以获得 T U 的实际类型 o (请注意其类型 Parent [_] < / strong>),假设您知道 o 类型为儿童

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

1 个答案:

答案 0 :(得分:0)

如果您稍微修改ParentChild(请注意除: 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,但它会起作用

  

假设您知道o是Child类型