0
特定のタイプのすべてのフィールドをすべての親クラスを含むオブジェクトインスタンスから取得するにはどうすればよいですか? BaseSet
のためにこの方法がうまく動作しリフレクトを介して特定のパブリックフィールドを取得する(すべての親クラス用)
import scala.reflect.runtime.universe._
import scala.reflect.runtime.{universe => ru}
def find(instance: Any): List[Target] = {
val m = ru.runtimeMirror(instance.getClass.getClassLoader)
val i = m.reflect(instance)
i.symbol.typeSignature.decls.flatMap {
case f: TermSymbol if !f.isMethod => i.reflectField(f).get match {
case d: Target => Some(d)
case _ => None
}
case _ => None
}.toList
}
:私はすべてのTarget
のフィールドを取得するための書き込み方法を試してみた
trait Target {
val message: String
def action: Unit = println("hello", message)
}
class ConcreteTarget(val message: String) extends Target
trait BaseSet {
val s = ""
val t1 = new ConcreteTarget("A")
val t2 = new ConcreteTarget("B")
val a = 123
}
class ExtendedSet extends BaseSet {
val t3 = new ConcreteTarget("C")
val f = "111"
}
:
find(new BaseSet{}) foreach (_.action)
//> (hello,A)
//> (hello,B)
は例えば、これらのクラスがあります
しかし、公開されているフィールドはです、親フィールドは見つかりません:
find(new ExtendedSet) foreach (_.action)
//> (hello,C)
何が問題なのですか?