斯卡拉是否有辦法獲得集合中包含的類?即如果我有:斯卡拉 - 如何獲得Vector的包含類?
val foo = Vector[Int]()
有沒有辦法從中取回classOf [Int]?
(只檢查第一個元素不起作用,因爲它可能是空的。)
斯卡拉是否有辦法獲得集合中包含的類?即如果我有:斯卡拉 - 如何獲得Vector的包含類?
val foo = Vector[Int]()
有沒有辦法從中取回classOf [Int]?
(只檢查第一個元素不起作用,因爲它可能是空的。)
您可以使用TypeTag
:
import scala.reflect.runtime.universe._
def getType[F[_], A: TypeTag](as: F[A]) = typeOf[A]
val foo = Vector[Int]()
getType(foo)
不是從集合本身,但是如果你從一個方法得到它的參數,你可以添加一個隱含的TypeTag
到方法在運行時獲取類型。例如。
def mymethod[T](x: Vector[T])(implicit tag: TypeTag[T]) = ...
查看https://docs.scala-lang.org/.../typetags-manifests.html瞭解詳情。
從技術上講,你可以通過使用TypeTag或Shapless圖書館分型/典型案例(見link)做到這一點。但我只想指出,所有這些技巧都是非常先進的解決方案,因爲沒有更好的方式來完成任務,而無需挖掘內部類型參數。
scala和java中的所有類型參數都受到運行時類型擦除的影響,如果您自己想着從類中提取這些信息,那麼重新設計您嘗試實現的解決方案可能是一個好兆頭。
[你實際上想做什麼?](http://mywiki.wooledge.org/XyProblem)一旦你擁有它,你期望如何處理這個類對象? –