检查定义了多少个对象属性

Ung*_*lan 3 scala

我在Scala世界中很陌生。有没有一种更好的方法来检查一个对象中定义了多少个属性,而不是遍历所有这些属性idDefined()并增加一个值?

case class Obj (
 a: Option[String],
 b: Option[String],
 c: Option[String],
 d: Option[String]
)
Run Code Online (Sandbox Code Playgroud)

Krz*_*sik 7

案例类扩展Product了提供productIterator。您可以像这样使用它:

val obj = Obj(Some("a") ,Some("4"), None, None)

obj.productIterator.count {
   case _: Some[_] => true
   case _ => false
} // returns 2
Run Code Online (Sandbox Code Playgroud)

要么

obj.productIterator.count {
   case x: Option[_] => x.isDefined
   case _ => false
} // returns 2
Run Code Online (Sandbox Code Playgroud)

  • 你是真正的MVP (2认同)