0
フィールドが汎用クラスに存在するかどうかを確認しようとしています。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要件に気付きませんでした。この名前のメソッドまたは型メンバーがある場合はtrueを返します。 –
@AlexeyRomanovはまったく正しい! 'universe.Symbol'の' isXXX'メソッドを使ってそれに応じてフィルタリングすることができます: 't.declarations.exists {x =>!x.isMethod && ...}' –