Scalaでは、Scalaのマニフェストと格納によって、与えられたクラスの型を取得しています。私の質問は、元のクラスが親クラスか他のクラスの子孫であるかどうかを調べるには、その型をどうやって調べるのですか?私は以下のように、理由は型消去のt: Class[MyParentClass]
上のパターンマッチを行うことができないように見えますScala reified型が特定の親クラスを拡張しているかどうかを調べるには?
:
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
は私が欠けているが、別のトリックですか?
うわー、ありがとうSciss - 素晴らしい作品です。 'classOf [GroupedPerishableProduct [_]] .isAssignableFrom(bananasType)' –