在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")
}
}
但是,我的IDE显示覆盖方法paint(args:DarkMaterial)的错误,即使DarkMaterial扩展了Material。为什么这是错的?任何人都知道如何解决它?
非常感谢你。
答案 0 :(得分:1)
你可以使用类型参数来解决问题。
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