具有时髦特征的钻石问题



在许多关于 Groovy Traits 的博客中,都提到它将解决钻石问题。但是我不清楚这个概念,即特征将如何解决钻石问题。

任何人都可以解释一下。

菱形问题是一个问题,当你有多个继承,两个或多个超类定义一个或多个具有相同签名的函数时。

具有时髦的特征,行为是明确的。默认情况下,选择最后一个实现。

trait A {
    String name() { "A" }
}
trait B {
    String name() { "B" }
}
class C implements A,B { }
class D implements B,A { }
assert new C().name() == "B"
assert new D().name() == "A"

也可以选择您想要的那个:

class E implements A,B {
    String name() { A.super.name() + B.super.name() }
}
assert new E().name() == "AB"

最新更新