2017-09-24 49 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中的所有类型参数都受到运行时类型擦除的影响,如果您自己想着从类中提取这些信息,那么重新设计您尝试实现的解决方案可能是一个好兆头。