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的一些事情但到目前为止没有运气。
答案 0 :(得分:0)
如果您稍微修改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
,但它会起作用
假设您知道o是Child类型