在Scala中,我通过Scala清单抓取给定类的类型并存储它。我的问题是,我该如何检查该类型以查看原始类是从一个父类还是另一个类继承而来?如何判断一个Scala实现类型是否扩展了某个父类?
它看起来像我不能t: Class[MyParentClass]
因为类型擦除进行模式匹配,如下图所示:
trait Product
trait PerishableProduct extends Product
class Fridge extends Product
class Banana extends PerishableProduct
def getProductType[P <: Product](implicit manifestP: Manifest[P]): Class[P] =
manifestP.erasure.asInstanceOf[Class[P]]
val isPerishable = getProductType[Fridge] match {
case x: Class[PerishableProduct] => true
case _ => false
}
// ^^ warning: non variable type-argument PerishableProduct in type pattern
// Class[PerishableProduct] is unchecked since it is eliminated by erasure
是否有另一种伎俩我失踪?
谢谢谢斯 - 这个作品很棒。它甚至适用于带有类型参数的特征:'classOf [GroupedPerishableProduct [_]]。isAssignableFrom(bananasType)' – 2012-01-16 08:30:04