Scala-如何获得包含class的Vector?

Scala- How to get a Vector's contained class?

Scala 是否有办法获取集合中包含的 class(es)?即如果我有:

val foo = Vector[Int]()

有没有办法从中取回 classOf[Int]?

(只检查第一个元素是行不通的,因为它可能是空的。)

不是来自集合本身,但如果您从方法中获取参数,则可以向该方法添加隐式 TypeTag 以在运行时获取类型。例如

def mymethod[T](x: Vector[T])(implicit tag: TypeTag[T]) = ...

详情见https://docs.scala-lang.org/.../typetags-manifests.html

您可以使用 TypeTag:

import scala.reflect.runtime.universe._

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

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

从技术上讲,您可以使用 Shapless 库中的 TypeTag 或 Typeable/TypeCase 来实现(参见 link)。但我只想指出,如果没有任何更好的方法可以在不挖掘内部类型参数的情况下完成任务,那么所有这些技巧都是非常先进的解决方案。

scala 和 java 中的所有类型参数都受到运行时类型擦除的影响,如果您发现自己正在考虑从 class 中提取这些信息,那么重新设计您正在尝试实施的解决方案。