【发布时间】:2025-12-02 16:30:01
【问题描述】:
给定以下代码:
sealed abstract class Foobar[+Parent <: Foobar[Parent]](parent: Option[Parent])
trait Foo[+Parent <: Foobar[Parent]] extends Foobar[Foo[Parent]]
trait Bar[+Parent <: Foobar[Parent]] extends Foobar[Bar[Parent]]
class Raboof[+Parent <: Foobar[Parent]](val parent: Foo[Parent]) extends Foobar(Some(parent)) with Foo[Parent] with Bar[Parent]
在 Scala 的类型系统中如何解决这个继承问题?
动机:假设的特征Foo 和Bar 将实现由多个类提供的方法,例如混合这些特征的类Raboof。
Scala-SDK 版本 3.0.2-vfinal-20131028-1923-Typesafe 的 Scala 工作表抱怨以下内容:
illegal inheritance; class Raboof inherits different type instances of class Foobar: scrap.Foobar[scrap.Bar[Parent]] and scrap.Foobar[scrap.Foo[Parent]]
不同类型的实例scrap.Foobar[scrap.Bar[Parent]] 和scrap.Foobar[scrap.Foo[Parent]] 应该分解为一个类型。在我对scrap.Foobar[scrap.Raboof[Parent]] 的理解中,因为Raboof 类混合了Foo 和Bar 这两个特征。
【问题讨论】:
标签: scala parent-child multiple-inheritance traits