关于Groovy代表团与继承相结合的澄清

时间:2013-06-22 03:24:41

标签: inheritance groovy delegates composition

在这里的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类?

1 个答案:

答案 0 :(得分:2)

不同之处在于,第一个方法委托给Date方法,但由于它没有扩展Date,因此无法将其发送到采用Date参数的方法。

通过添加extends Date,您可以避免此限制