如何通过Scala -reflect和TypeTag访问泛型类字段(Scala 2.10)



我想检查一个字段是否存在于一个泛型类中。

import scala.reflect.runtime.{universe => ru}    
class Example[T:ru.TypeTag](val value:T)
object Example {
  def apply[T:ru.TypeTag](value:T, fieldName: String) : Example[T] = {
    val t = ru.typeOf[T]
    val hasField: Boolean = ??? // HOW CAN I CHECK THAT class T has the field with name fieldName?
    if(hasField)
      new Example(value)
    else
      throw new RuntimeException()
  }
}
case class Foo(field:String)
object Test{
  Example(Foo("hola"), "field") // WILL WORK
  Example(Foo("hola"), "other") // THROWS EXCEPTION
}

我如何实现这个??

scala 2.10:

val hasField = t.declarations.exists { _.name.decodedName.toString == fieldName }
scala 2.11:

val hasField = t.decls.exists { _.name.decodedName.toString == fieldName }

edit:一开始没有注意到Scala 2.10的要求

最新更新