在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