java - Scala类继承和方法参数

标签 java scala oop

在 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。为什么这是错误的?任何人都知道如何解决它?

非常感谢。

最佳答案

您可以使用类型参数来确定事情。

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

关于java - Scala类继承和方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38620694/

相关文章:

c - 为 Cocoa(touch) 开发创建自己的库的指南

java - "variable is accessed from within inner class needs to be declared final"错误

java - 如何在 testng 的单个套件中多次运行测试类

java - try-with-resource 中的 close() 异常

scala - 如何在scala中找到对象的大小?

Scala - 简单地将 2D 数组写入屏幕的最简单的 2D 图形?

java - 将负值的 byte[] 转换为 String

java - 将字符串从 EBCDIC 转换为 Unicode/UTF8

scala - 管理下划线以定义匿名函数的规则是什么?

java - 设计来管理应用程序中服务的付费订阅?