В 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
Есть ли еще один трюк, который я пропустил?