Scala の型消去( type erasure )

昨日のコップの会にて、型消去(type erasure)が*1出てきました。

scala> def isIntIntMap(x: Any) = x match {
     | case m: Map[Int,Int] => true //←ここのInt,Int型情報が実行時には消える。
     | case _ => false
     | }
warning: there were unchecked warnings; re-run with -unchecked for details
isIntIntMap: (x: Any)Boolean

scala> isIntIntMap(Map("abc"->"abc")) //String,Stringなのにtrue
res0: Boolean = true

ジェネリック型は、実行時に型情報が消去される。ただしArrayは消去されないらしい。
どこかで見たなーと思って探したらありました。

Scala勉強会@東北のMLでymnkさんが解説してました。
http://groups.google.co.jp/group/scala--tohoku/browse_thread/thread/2858a1b7807929c5?pli=1


あとこちらにものってました。
http://sites.google.com/site/scalamemo/ouyou/kata-shisutemu

*1:コップ本p.258