2010-12-07 20 views
3

値のList[Any]と対応するClassManifest[_]のリストがあり、値の元の型が格納されています。どのように私はそれを元のタイプにリストからいくつかの価値をキャストしますか?ScalaのClassManifestを使用しているAnyからのキャスト値

def cast[T](x: Any, mf: ClassManifest[T]): T = x.asInstanceOf[T]は機能しません。

ありがとうございました。

+0

あなたの質問は、かなりsimilraです:http://stackoverflow.com/questions/1094173/how-do-i-get-around-type-erasure-on-scala-or-why-cant-i-get- the-type-parameter – Nicolas

答えて

3

返されるタイプがcastであるため、これはおそらく動作しません。Tが制限されているものの最高の一般的なスーパータイプとなります。コンパイル時にそれを具体化する方法はありません。

あなたは本質的に異なる種類の強く型付けされたコレクションを構築しようとしている場合は、あなたが本当にしたいことはHListです:

http://jnordenberg.blogspot.com/2008/09/hlist-in-scala-revisited-or-scala.html

+0

Thx、面白そうですが、HListは10要素で制限されています。 – fehu

+0

@fehu:なぜあなたはそれをどう思いますか? HListの動機の1つは、Tupleの22要素の制限を超える、任意の数の要素を保持できることです。 –

0

へのJava/ScalaでClassインスタンスを使用する方法オブジェクトをキャストするにはClass.castメソッドを使用することです。キャストは意味がないので(すなわち、余分な情報を提供しています)、

mf.erasure.cast(x) //T 

をしかしmf.erasureClass[_](またはJavaでClass<?>)であるので、これは、動作しません:だからあなたはあなたができると思うことがあります。これは、(もちろん)非正規化ジェネリックを使用する際の欠点の1つです。

関連する問題