在Scala中,我希望具有以下特征和类

trait Paper {
    def paint(args: Material): Unit
}

class WhitePaper extends Paper {
    override def paint(args: DarkMaterial): Unit = {
        darkMaterials.open()
    }
}


trait Material {
   def open() : Unit = {}
}

class DarkMaterial extends Material{
   override def open() : Unit = {
       print("Dark material")
   }
}


但是,即使DarkMaterial扩展了Material,我的IDE仍显示错误的方法paint(args:DarkMaterial)的覆盖。为什么会这样呢?有人知道如何解决吗?

非常感谢。

最佳答案

您可以使用类型参数确定内容。

trait Paper[M] {
  def paint(args: M): Unit
}

class WhitePaper extends Paper[DarkMaterial] {
  override def paint(args: DarkMaterial): Unit = { // "override" not needed
    args.open()
  }
}
// Material and DarkMaterial are unchanged

10-07 15:59