2016-07-29 46 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

非常有用!我應該閱讀什麼類型的東西來了解更多關於剛剛發生的事情? –