2013-10-14 4 views
4

Я использую Scala 2.11.0-M5.Scala - как получить «тип» для поля с использованием отражения api

Мне нужно найти поля (члены, которые являются vars или vals) класса Scala/type, и для каждого поля мне нужно найти класс/тип.

До сих пор мне удалось получить членов поля, но я не могу понять, как получить тип члена, когда у меня есть член.

scala> class Account { 
    var name: String = null; 
    var accountNumber: String = null; 
}  |  |  | 
defined class Account 

scala> import reflect.runtime.universe._ 
import reflect.runtime.universe._ 

scala> for (m <- typeOf[Account].members.filter(m => !m.isMethod)) { 
| println(m) 
| // ??? how do I get the member's type ???? 
| } 
variable accountNumber 
variable name 

ответ

8

Вы можете использовать typeSignature:

scala> typeOf[Account].members.filter(!_.isMethod).foreach(
| sym => println(sym + " is a " + sym.typeSignature) 
|) 
variable accountNumber is a String 
variable name is a String 

В этом контексте этот метод будет возвращать reflect.runtime.universe.Type.

0

Выяснил это.

Просто нужно использовать m.typeSignature

for (m <- typeOf[Account].members.filter(m => !m.isMethod)) { 
    | println(m) 
    | println(m.typeSignature) 
    | } 
variable accountNumber 
String 
variable name 
String 
Смежные вопросы