在Scala中获取案例类属性的最有效方法是什么?我需要在任何实例化之前执行此操作。
例如案例类:
Person(name: String, weight: Float)
我想做点什么:
Person.attributes_length // returning 2
答案 0 :(得分:4)
你可以做一个"假的"实例或如果你有一个:
Person(null, 0).productArity
另一种选择是使用反射。
将反射库添加到SBT:
"org.scala-lang" % "scala-reflect" % "2.11.8"
并做:
weakTypeOf[Person].decl(termNames.CONSTRUCTOR).asMethod.paramLists.size
将反射库添加到SBT:
"org.scala-lang" % "scala-reflect" % "2.10.6"
并做:
import scala.reflect.runtime.universe._
weakTypeOf[Person].declaration(nme.CONSTRUCTOR).asMethod.paramss.head.size
干杯
答案 1 :(得分:0)
为了完整起见,我最终使用了依赖:
libraryDependencies += "org.scala-lang" % "scala-reflect" % "2.10.4"
代码:
import scala.reflect.runtime.universe._
val length = weakTypeOf[Person].declaration(scala.reflect.runtime.universe.nme.CONSTRUCTOR).asMethod.paramss.head.length