0
我是Scala的新手,并且曾经在类似的问题中看过,但我不确定它们与我的问题是否一样 - 如果我错了,请致歉。Scala将数值提取到多个案例类的数组中
从本质上讲,我不确定如何重构这段代码
case class ModelX(a: Int, b: Int)
case class ModelY(b: Int, c: Int)
case class ModelZ(a: Int, c: Int)
def extract_x(e: ModelX): Array[Any] = e.productIterator.map {
case op: Option[_] => op.getOrElse(null)
case v => v
}.toArray
def extract_y(e: ModelY): Array[Any] = e.productIterator.map {
case op: Option[_] => op.getOrElse(null)
case v => v
}.toArray
def extract_z(e: ModelZ): Array[Any] = e.productIterator.map {
case op: Option[_] => op.getOrElse(null)
case v => v
}.toArray
为任意数量的模型(如我有超过3个)。我这样做的原因是我可以从Cassandra中提取一行到这些模型中的一个,然后我需要将它传递给Array[Any]
,因为在此之后我有序列化方法可用,并且可以使用返回的值我的选择语言更舒适。
我试图定义一个基类,ModelX|Y|Z
扩展,这样我可以只在基类应用extract
,但productIterator
是不可用的基类。如果这是一个不好解释,我试过/想做的事是这样的:
class BaseModel()
case class ModelX(a: Int, b: Int) extends BaseModel
case class ModelY(b: Int, c: Int) extends BaseModel
case class ModelZ(a: Int, c: Int) extends BaseModel
def extract(e: BaseModel): Array[Any] = e.productIterator.map {
case op: Option[_] => op.getOrElse(null)
case v => v
}.toArray
我很新的斯卡拉,所以我想我已经错过了一些东西明显。任何帮助在这里将不胜感激。
AKHIL
谢谢!第一个建议很完美。 –