本文介绍了在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中编译,因为在特征A的类型中重写方法工作=>字符串;方法工作具有不兼容的类型".
Class C
won't compile in scala 2.10, because of "overriding method work in trait A of type => String; method work has incompatible type".
如何选择一种特定的方法?
How to choose one specific method?
推荐答案
恐怕没有办法. super[A].work
方法仅在A
和B
具有相同的返回类型时有效.
I'm afraid there is no way to do that. The super[A].work
way works only if A
and B
have the same return types.
考虑一下:
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
这篇关于在Scala多重继承中,如何解决签名相同但返回类型不同的冲突方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!