简体   繁体   English

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

[英]How to access to generic class field via scala-reflect and TypeTag (Scala 2.10)

I am trying to check if a field exists in a generic class. 我正在尝试检查通用类中是否存在字段。

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
}

How can I implement this?? 我该如何实现呢?

2.10: 2.10:

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

2.11: 2.11:

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

edit: didn't notice the Scala 2.10 requirement at first 编辑:起初没有注意到Scala 2.10要求

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM