具有Groovy特征的钻石问题

时间:2017-10-24 08:36:31

标签: groovy traits

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

任何人都可以解释一下。

1 个答案:

答案 0 :(得分:5)

当您有多个继承并且两个或多个超类定义具有相同签名的一个或多个函数时,diamond problem是一个问题。

使用常规特征,行为定义明确。默认情况下,选择最后一个实现。

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"