有没有办法一般性地获得Scala类型的清单?例如,如果我只有一个Class引用可以使用,有没有办法可以获得相应的清单?
答案 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))