Scala中案例类的属性数

时间:2016-03-23 17:16:03

标签: scala

在Scala中获取案例类属性的最有效方法是什么?我需要在任何实例化之前执行此操作。

例如案例类:

Person(name: String, weight: Float)

我想做点什么:

Person.attributes_length // returning 2

2 个答案:

答案 0 :(得分:4)

使用实例

你可以做一个"假的"实例或如果你有一个:

Person(null, 0).productArity

通过反思

另一种选择是使用反射。

Scala 2.11

将反射库添加到SBT:

"org.scala-lang" % "scala-reflect" % "2.11.8"

并做:

weakTypeOf[Person].decl(termNames.CONSTRUCTOR).asMethod.paramLists.size

Scala 2.10

将反射库添加到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