How to know if an object is an instance of a TypeTag's type?

instanceof, scala, scala-2.10

Solution

If it suffices to use subtyping checks on erased types, do as Travis Brown suggested in the comment above:

def myIsInstanceOf[T: ClassTag](that: Any) =
  classTag[T].runtimeClass.isInstance(that)

Otherwise you need to explicitly spell out the `U` type, so that scalac captures its type in a type tag:

def myIsInstanceOf[T: TypeTag, U: TypeTag] =
  typeOf[U] <:< typeOf[T]

Problem

I have a function which is able to know if an object is an instance of a `Manifest`'s type. I would like to migrate it to a `TypeTag` version. The old function is the following one: ``` def myIsInstanceOf[T: Manifest](that: Any) = implicitly[Manifest[T]].erasure.isInstance(that) ``` I have been experimenting with the TypeTags and now I have this TypeTag version: ``` // 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 */ ``` Is there any better way to achieve this task? Can the parameterized `U` be omitted, using an `Any` instead (just as it is done in the old function)?

Original source