微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐