Как правило, получить манифест типа Scala - PullRequest
3 голосов
/ 22 января 2012

Есть ли способ получить манифест типа Scala?Например, если у меня есть только ссылка на класс для работы, есть ли способ получить соответствующий манифест?

Ответы [ 2 ]

7 голосов
/ 22 января 2012

Встроенное в Scala implicitly[T] даст вам неявное значение типа T (если оно существует).Поэтому implicitly[Manifest[T]] вернет манифест для типа T.

Если у вас есть ссылка на класс, вы можете получить манифест для этого класса следующим образом:

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

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

Тип манифеста: _ <: Foo вместо Foo, но они равны.

implicitly[Manifest[Foo]] == manifestFor(x.getClass)
//Boolean = true
0 голосов
/ 13 августа 2012

Ну, я пытался сделать что-то похожее, но задумчиво. Во время компиляции у меня не было символа класса. Мне пришлось использовать этот код, не столь очевидный из скалярных документов, с множеством неочевидных и вводящих в заблуждение методов, присутствующих рядом с этой точкой, так что он, вероятно, будет полезен для других.

Manifest.classType(Class.forName(className))
...