値のList[Any]
と対応するClassManifest[_]
のリストがあり、値の元の型が格納されています。どのように私はそれを元のタイプにリストからいくつかの価値をキャストしますか?ScalaのClassManifestを使用しているAnyからのキャスト値
def cast[T](x: Any, mf: ClassManifest[T]): T = x.asInstanceOf[T]
は機能しません。
ありがとうございました。
値のList[Any]
と対応するClassManifest[_]
のリストがあり、値の元の型が格納されています。どのように私はそれを元のタイプにリストからいくつかの価値をキャストしますか?ScalaのClassManifestを使用しているAnyからのキャスト値
def cast[T](x: Any, mf: ClassManifest[T]): T = x.asInstanceOf[T]
は機能しません。
ありがとうございました。
返されるタイプがcast
であるため、これはおそらく動作しません。T
が制限されているものの最高の一般的なスーパータイプとなります。コンパイル時にそれを具体化する方法はありません。
あなたは本質的に異なる種類の強く型付けされたコレクションを構築しようとしている場合は、あなたが本当にしたいことはHListです:
http://jnordenberg.blogspot.com/2008/09/hlist-in-scala-revisited-or-scala.html
Thx、面白そうですが、HListは10要素で制限されています。 – fehu
@fehu:なぜあなたはそれをどう思いますか? HListの動機の1つは、Tupleの22要素の制限を超える、任意の数の要素を保持できることです。 –
へのJava/ScalaでClass
インスタンスを使用する方法オブジェクトをキャストするにはClass.cast
メソッドを使用することです。キャストは意味がないので(すなわち、余分な情報を提供しています)、
mf.erasure.cast(x) //T
をしかしmf.erasure
がClass[_]
(またはJavaでClass<?>
)であるので、これは、動作しません:だからあなたはあなたができると思うことがあります。これは、(もちろん)非正規化ジェネリックを使用する際の欠点の1つです。
あなたの質問は、かなりsimilraです:http://stackoverflow.com/questions/1094173/how-do-i-get-around-type-erasure-on-scala-or-why-cant-i-get- the-type-parameter – Nicolas