Manifests: Reified Typesで紹介されているScala2.7.2の隠し?新機能が自分的にヒットです。
Java の Generics はコンパイルされてバイトコードになると消えてなくなってしまうものでした。そのため、実行時にパラメータ型が実際どの型になっているのかを知る手段がありませんでした。
たとえば、
----
public <T> T hoge()
----
というメソッドがあったとき、
hogeメソッドの実装は今、このTの実際の型をどうがんばっても取得できなかったのです。
なので、hogeの中でTの型を知りたいときは、
----
public <T> T hoge(Class<T> type)
----
のように引数にClassを渡す必要がありました。
この問題を解決するため、 Scala 2.7.2からは、scala.reflect.Manifestという
クラスを暗黙のパラメータとして引数に指定しておくと、
呼び出し側では、明示的にパラメータを渡さなくても、
勝手にManifestのインスタンスを渡してくれるし、
このManifestのインスタンスから、Tの実行時のクラスも取れるということです。
まだ実験的なものなので、Undocumentedな状態らしいですが。
Java の Generics はコンパイルされてバイトコードになると消えてなくなってしまうものでした。そのため、実行時にパラメータ型が実際どの型になっているのかを知る手段がありませんでした。
たとえば、
----
public <T> T hoge()
----
というメソッドがあったとき、
hogeメソッドの実装は今、このTの実際の型をどうがんばっても取得できなかったのです。
なので、hogeの中でTの型を知りたいときは、
----
public <T> T hoge(Class<T> type)
----
のように引数にClassを渡す必要がありました。
この問題を解決するため、 Scala 2.7.2からは、scala.reflect.Manifestという
クラスを暗黙のパラメータとして引数に指定しておくと、
呼び出し側では、明示的にパラメータを渡さなくても、
勝手にManifestのインスタンスを渡してくれるし、
このManifestのインスタンスから、Tの実行時のクラスも取れるということです。
まだ実験的なものなので、Undocumentedな状態らしいですが。