【问题标题】:Scala- How to get a Vector's contained class?Scala-如何获取向量的包含类?
【发布时间】:2018-03-05 17:32:26
【问题描述】:
Scala 是否有办法获取集合中包含的类?即如果我有:
val foo = Vector[Int]()
有没有办法从中取回 classOf[Int] ?
(仅检查第一个元素是行不通的,因为它可能是空的。)
【问题讨论】:
标签:
scala
reflection
collections
scala-collections
【解决方案1】:
你可以使用TypeTag:
import scala.reflect.runtime.universe._
def getType[F[_], A: TypeTag](as: F[A]) = typeOf[A]
val foo = Vector[Int]()
getType(foo)
【解决方案3】:
从技术上讲,您可以通过使用 Shapless 库中的 TypeTag 或 Typeable/TypeCase 来实现(请参阅link)。但我只想指出,所有这些技巧都是非常先进的解决方案,因为没有更好的方法可以在不挖掘内部类型参数的情况下完成任务。
scala 和 java 中的所有类型参数都会受到运行时类型擦除的影响,如果您突然想到从类中提取这些信息,那么重新设计您正在尝试实现的解决方案可能是一个好兆头。