SCALA는 JVM의 type erasure issue 를 TypeTag(이전에는 Manifest)로 해결 할 수 있다
// TODO undeprecated until Scala reflection becomes non-experimental // @deprecated("Use `scala.reflect.ClassTag` (to capture erasures) or scala.reflect.runtime.universe.TypeTag (to capture types) or both instead", "2.10.0") type Manifest[T] = scala.reflect.Manifest[T]
scala> def evenElems[T : ClassTag](xs: Vector[T]): Array[T] = { | val arr = new Array[T]((xs.length + 1) / 2) | for (i <- 0 until xs.length by 2) | arr(i / 2) = xs(i) | arr | } evenElems: [T](xs: Vector[T])(implicit evidence$1: scala.reflect.ClassTag[T])Array[T] scala>
ClassTag는 최상위의 Class의 Type정보만을 생성해준다.
ex) ClassTag[List[String]] -> collection.immutable.List
실제로 Intellij에서 Debugging 화면에서 보면 implicit evidence 를 볼 수 있다