У меня есть функция, которая может узнать, является ли объект экземпляром типа Manifest
. Я хотел бы перенести его на версию TypeTag
. Старая функция следующая:
def myIsInstanceOf[T: Manifest](that: Any) =
implicitly[Manifest[T]].erasure.isInstance(that)
Я экспериментировал с TypeTags и теперь у меня есть эта версия 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
вместо (, как это делается в старой функции )?