我正在学习案例课程。据我了解,案例类不能被其他案例类扩展。解决以下问题的惯用方式是什么:
我有两个案例类,A和B。它们是相同的,并馈入另一个案例类C。现在,当我想定义“ +”函数时,就会出现问题。可以在下面看到:
object Example extends App {
// repetitive case classes A and B - Can they be abstracted to one case class?
case class A(a: Int,b: String) {
def f1(): Unit = println(a,b)
}
case class B(a: Int,b)
}
case class C(a: A,b: B) {
def serialize() = Map("a" -> a,"b" -> b)
def +(new_a: A): C = C(new_a,b)
def +(new_b: B): C = C(a,new_b)
}
}
上面的内容可以编译,但是非常重复。如果删除案例类B,而仅使用案例类A,则可以尝试执行以下操作:
// if I use the same type for both A and B,I cannot use + individually anymore
case class C_alt(a: A,b: A) {
def serialize() = Map("a" -> a,"b" -> b)
def +(new_a: A): C_alt = C_alt(new_a,b)
def +(new_b: A): C_alt = C_alt(a,new_b)
}
但是,由于类型相同并且重载失败,我现在不能再为A和B同时拥有“ +”功能。
解决此代码重复问题的惯用scala方法是什么?理想情况下,我希望有一个实现这些方法的通用案例类,并且A和B都对其进行扩展。但是由于不允许通过其他案例类扩展案例类,因此我应该使用普通的类吗?