通常获取Scala类型的清单

时间:2012-01-22 03:24:14

标签: scala manifest

有没有办法一般性地获得Scala类型的清单?例如,如果我只有一个Class引用可以使用,有没有办法可以获得相应的清单?

2 个答案:

答案 0 :(得分:7)

Scala的内置implicitly[T]将为您提供类型为T的隐式值(如果存在)。因此implicitly[Manifest[T]]将返回T类型的清单。

如果你有一个Class引用,你可以像这样获得Class的Manifest:

def manifestFor[T: Manifest](c: Class[T]) = implicitly[Manifest[T]]

class Foo
val x =  new Foo
manifestFor(x.getClass)
//scala.reflect.Manifest[_ <: Foo] = _ <: Foo

Manifest的类型为_ <: Foo,而不仅仅是Foo,但它们是相同的。

implicitly[Manifest[Foo]] == manifestFor(x.getClass)
//Boolean = true

答案 1 :(得分:0)

好吧,我试图做一些类似的事情,但是反思。在编译时我没有类符号可用。我不得不使用这个代码,scaladocs并不那么明显,在这一点附近存在多种非显而易见和误导性的方法,因此它可能对其他人有用。

Manifest.classType(Class.forName(className))