我正在迁移曾经使用 Scala 2 反射的代码。
我正在尝试使用scala-reflection库。
我需要获取案例类中给定名称的字段的值。
例子:
$ scala-cli -j system -S 3.4.2 --dep co.blocke::scala-reflection:2.0.8
scala> import co.blocke.scala_reflection.RType
scala> case class A(a: Int, b: String)
// defined case class A
scala> import co.blocke.scala_reflection.rtypes.ScalaClassRType
scala> val t = RType.of[A].asInstanceOf[ScalaClassRType[A]]
val t: co.blocke.scala_reflection.rtypes.ScalaClassRType[A] = ScalaClassRType(rs$line$2$A,rs$line$2$.A,List(),List(),List(),List(ScalaFieldInfo(0,a,IntRType(),Map(),None,None,false), ScalaFieldInfo(1,b,StringRType(),Map(),None,None,false)),Map(),List(java.lang.Object, scala.Product, java.io.Serializable),false,false,true,false,Map(),List(),List(),false)
scala> t.fields.find(_.name == "a")
val res2: Option[co.blocke.scala_reflection.rtypes.FieldInfo] = Some(ScalaFieldInfo(0,a,IntRType(),Map(),None,None,false))
scala> val c = A(3,"hola")
val c: A = A(3,hola)
在这个例子中,如何a
通过实例反射来获取字段的值c
。
如果更容易的话,我可以考虑使用其他库,如izumi-reflect。