2016-07-29 48 views
1

寻找能够检索大小写类的参数名称和类型。我已经能够获取姓名,但没有名字和类型。这里是我做的一个尝试,它基于Stackoverflow上的其他片段。注释掉的部分是我想要做的,但不起作用。获取大小写类参数和类型

def getMethods[T: TypeTag] = typeOf[T].members.collect { 
    //case m: MethodSymbol if m.isCaseAccessor => (m, classOf[T].getDeclaredField(m).getType()) 
    case m: MethodSymbol if m.isCaseAccessor => m 
    }.toList 

    case class Person(name: String, age: Int) 

    getMethods[Person] 

删除注释和评论线下,我得到

<console>:13: error: class type required but T found 
       case m: MethodSymbol if m.isCaseAccessor => (m, classOf[T].getDeclaredField(m).getType()) 

我正在寻找类似List(("name", String), ("age", Int))或任何类似。我想斯卡拉2.10但斯卡拉2.11也可以。

回答

0
import scala.reflect.runtime.{universe => ru} 
def getSymbols[T: ru.TypeTag]: List[ru.Symbol] = ru.typeOf[T].members.toList 
case class Person(name: String, age: Int) 



scala> getSymbols[Person].filter(!_.isMethod).map(x=>x.name->x.info) 
res1: List[(reflect.runtime.universe.Symbol#NameType, reflect.runtime.universe.Type)] = List((age ,scala.Int), (name ,String)) 
+0

非常有用!我应该阅读什么类型的东西来了解更多关于刚刚发生的事情? –