在scala多重继承中,如何解决具有相同签名但不同返回类型的冲突方法?

考虑下面的代码

trait A {
  def work = { "x" }
}

trait B {
  def work = { 1 }
}

class C extends A with B {
  override def work = super[A].work
}

C类将不会在scala 2.10中进行编译,因为“在类型=> String的trait A中重写方法的工作方法工作具有不兼容的类型”.

如何选择一种具体方法

解决方法

恐怕没办法做到这一点.只有当A和B具有相同的返回类型时,超级[A].工作方式才有效.

考虑这个:

class D extends B

....

val test: List[B] = List(new C(),new D())
test.map(b => b.work) //oops - C returns a String,D returns an Int

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...