2013-06-22 82 views
1

混在這裏Groovy的代表團文章(http://groovy.codehaus.org/Delegate+transformation),我對下面的代碼混淆:澄清關於Groovy代表團繼承

概述後:

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類中?

回答

2

是不是差異,即第一個委託到Date方法,但因爲它沒有延伸Date它不能被髮送給帶有日期參數的方法。

通過添加extends Date,您避免此限制