我有一個值爲List[Any]
的值和一個相應的列表ClassManifest[_]
,存儲值的原始類型。我如何將列表中的某些值恢復爲原始類型?在Scala中使用ClassManifest的任何值演繹值
def cast[T](x: Any, mf: ClassManifest[T]): T = x.asInstanceOf[T]
不起作用。
謝謝你的回答。
我有一個值爲List[Any]
的值和一個相應的列表ClassManifest[_]
,存儲值的原始類型。我如何將列表中的某些值恢復爲原始類型?在Scala中使用ClassManifest的任何值演繹值
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 2010-12-07 14:34:15
可以在Java/Scala的一個Class
實例的方式投一個對象就是使用Class.cast
的方法。所以,你可能會認爲你可以這樣做:
mf.erasure.cast(x) //T
但是,這是行不通的,因爲mf.erasure
是Class[_]
(或Java中的Class<?>
),所以劇組是沒有意義的(即不提供任何額外的信息)。這當然是使用非物化泛型的一個缺點。
你的問題是相當similra:http://stackoverflow.com/questions/1094173/how-do-i-get-around-type-erasure-on-scala-or-why-cant-i-get-該類型參數 – Nicolas 2010-12-07 12:24:39