斯卡拉是否有办法获得集合中包含的类?即如果我有:斯卡拉 - 如何获得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)一旦你拥有它,你期望如何处理这个类对象? –