- (Tested in Scala 2.8)
- scala> def manOf[T: Manifest](t: T): Manifest[T] = manifest[T]
- manOf: [T](t: T)(implicit evidence$1: Manifest[T])Manifest[T]
- scala> manOf(1)
- res0: Manifest[Int] = Int
- scala> manOf("")
- res1: Manifest[java.lang.String] = java.lang.String
- scala> val m = manOf(List(1))
- m: Manifest[List[Int]] = scala.collection.immutable.List[Int]
- scala> m.erasure
- res7: java.lang.Class[_] = class scala.collection.immutable.List
- scala> m.typeArguments
- res9: List[scala.reflect.Manifest[_]] = List(Int)
- scala> val m2 = manOf(List(1, "string"))
- m2: Manifest[List[Any]] = scala.collection.immutable.List[Any]
- scala> m <:< m2
- res10: Boolean = true
- scala> "123"
- res0: java.lang.String = 123
- scala> 123
- res1: Int = 123
- scala> 12.3
- res2: Double = 12.3
- scala> "123".getClass.getSimpleName
- res3: java.lang.String = String
- scala> 123.asInstanceOf[AnyRef].getClass.getSimpleName
- res5: java.lang.String = Integer
- scala> 12.3.asInstanceOf[AnyRef].getClass.getSimpleName
- res6: java.lang.String = Double