在这里的Groovy代表团文章(http://groovy.codehaus.org/Delegate+transformation)中,我对以下代码感到困惑:
概述后:
import java.text.SimpleDateFormat
class Event {
@Delegate Date when
String title, url
}
def df = new SimpleDateFormat("yyyy/MM/dd")
def gr8conf = new Event(title: "GR8 Conference",
url: "http://www.gr8conf.org",
when: df.parse("2009/05/18"))
def javaOne = new Event(title: "JavaOne",
url: "http://java.sun.com/javaone/",
when: df.parse("2009/06/02"))
assert gr8conf.before(javaOne.when)
文章解释说可以使用以下内容:
class Event extends Date {
@Delegate Date when
String title, url
}
但是,在下面的示例中,特别是在“Prefer composition over inheritance?”的上下文中是否同时具有继承和组合(委托)并不是多余的?另外,这不会产生冲突(即哪些方法被“委托”到委托Date,哪些方法被调用到事件继承的Date类?
答案 0 :(得分:2)
不同之处在于,第一个方法委托给Date
方法,但由于它没有扩展Date
,因此无法将其发送到采用Date参数的方法。
通过添加extends Date
,您可以避免此限制