出于我的应用程序的目的,我需要能够在运行时找到类型(不是实例)的字段列表和这些字段的类型.到目前为止,我只能得到一个包含getter的case类的方法列表,classOf[MyCaseClass].getMethods
并且从简单的类中没有任何用处.我错过了什么吗?有没有针对这种目的的反射库?怎么做得好?
Nik*_*kov 17
使用Scala 2.10反射:
scala> import reflect.runtime.{universe => ru}
import reflect.runtime.{universe=>ru}
scala> trait A { val field1: Int; val field2: Char; def meth1: Int }
defined trait A
scala> val fieldSymbols = ru.typeOf[A].members.collect{ case m: ru.MethodSymbol if m.isGetter => m }
fieldSymbols: Iterable[reflect.runtime.universe.MethodSymbol] = List(value field2, value field1)
Run Code Online (Sandbox Code Playgroud)
返回的符号包含所有类型信息,例如:
scala> fieldSymbols.map(_.typeSignature)
res16: Iterable[reflect.runtime.universe.Type] = List(=> scala.Char, => scala.Int)
Run Code Online (Sandbox Code Playgroud)
您可能需要查看有关反射scala的此文档. getMethods
是一种来自Java反射的方法.你在那里找不到什么?来自Javadoc:
您可以阅读有关Java反射的更多信息.
请注意,由于擦除,并非所有类型信息都可在运行时使用.
归档时间: |
|
查看次数: |
6467 次 |
最近记录: |