【发布时间】:2018-04-04 23:18:06
【问题描述】:
在许多关于 Groovy Traits 的博客中都提到它将解决钻石问题。但是我不清楚特征将如何解决钻石问题。
谁能解释一下。
【问题讨论】:
在许多关于 Groovy Traits 的博客中都提到它将解决钻石问题。但是我不清楚特征将如何解决钻石问题。
谁能解释一下。
【问题讨论】:
diamond problem 是一个问题,当您有多重继承并且两个或多个超类定义一个或多个具有相同签名的函数时。
使用 groovy 特征,行为是明确定义的。默认情况下,选择最后一个实现。
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"
【讨论】: