由于 Scala 中的继承线性化,我想了解我为案例类指定的特征是如何相对于 Scala 编译器自动生成和添加的两个特征进行排序的;即Product with Serializable
(令人失望的是,它不是ProductN[...]
从 2.12 开始的)。
我已经非常彻底地搜索了,我还没有找到它直接解决的问题。鉴于以下情况:
case class Cc(a: Int, b: Int) extends MyTraitA with MyTraitB
在 Scala 编译器自动生成代码之后,关于生成的继承顺序,以下哪一项是正确的假设?
case class Cc(a: Int, b: Int) extends MyTraitA with MyTraitB with Product with Serializable
case class Cc(a: Int, b: Int) extends Product with Serializable with MyTraitA with MyTraitB
然后,我还有一个问题。Product2[...]
如果我明确地扩展到案例类,会发生什么不良或意外的影响?以下是插入重复的上述两段代码Product2[...]
:
case class Cc(a: Int, b: Int) extends MyTraitA with MyTraitB with Product2[Int, Int] with Product with Serializable
case class Cc(a: Int, b: Int) extends Product with Serializable with MyTraitA with MyTraitB with Product2[Int, Int]
IOW,是否存在任何不良的相互作用,因为两者Product
和Product2
一起出现?