在scala 2.10中获取子对象的泛型类型


class Parent[T: ClassTag] {
}
class Child[U: ClassTag, T: ClassTag] extends Parent[T] {
}
val o: Parent[_] = new Child[Int, String]
在给定o(注意它的类型Parent[_])的情况下,假设您知道o的类型是Child,那么是否有可能得到TU的实际类型?

我已经尝试了一些基于运行时解析使用scala 2.10反射的类型参数的事情,但到目前为止还没有运气。

如果您稍微修改了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,但它会工作

假设你知道0的类型是Child

相关内容

  • 没有找到相关文章

最新更新