2017-09-24 53 views
2

斯卡拉是否有辦法獲得集合中包含的類?即如果我有:斯卡拉 - 如何獲得Vector的包含類?

val foo = Vector[Int]() 

有沒有辦法從中取回classOf [Int]?

(只檢查第一個元素不起作用,因爲它可能是空的。)

+0

[你實際上想做什麼?](http://mywiki.wooledge.org/XyProblem)一旦你擁有它,你期望如何處理這個類對象? –

回答

4

您可以使用TypeTag

import scala.reflect.runtime.universe._ 

def getType[F[_], A: TypeTag](as: F[A]) = typeOf[A] 

val foo = Vector[Int]() 
getType(foo) 
1

從技術上講,你可以通過使用TypeTag或Shapless圖書館分型/典型案例(見link)做到這一點。但我只想指出,所有這些技巧都是非常先進的解決方案,因爲沒有更好的方式來完成任務,而無需挖掘內部類型參數。

scala和java中的所有類型參數都受到運行時類型擦除的影響,如果您自己想着從類中提取這些信息,那麼重新設計您嘗試實現的解決方案可能是一個好兆頭。