Как узнать, является ли объект экземпляром типа TypeTag?
У меня есть функция, которая может знать, является ли объект экземпляромManifest
тип. Я хотел бы перенести его вTypeTag
версия. Старая функция следующая:
def myIsInstanceOf[T: Manifest](that: Any) =
implicitly[Manifest[T]].erasure.isInstance(that)
Я экспериментировал с TypeTag, и теперь у меня есть эта версия TypeTag:
// Involved definitions
def myInstanceToTpe[T: TypeTag](x: T) = typeOf[T]
def myIsInstanceOf[T: TypeTag, U: TypeTag](tag: TypeTag[T], that: U) =
myInstanceToTpe(that) stat_<:< tag.tpe
// Some invocation examples
class A
class B extends A
class C
myIsInstanceOf(typeTag[A], new A) /* true */
myIsInstanceOf(typeTag[A], new B) /* true */
myIsInstanceOf(typeTag[A], new C) /* false */
Есть ли лучший способ решить эту задачу? Может ли параметризованныйU
быть опущен, используяAny
вместо этого (как это сделано в старой функции)?