2009-09-18 164 views
3

我正在研究groovy-wicket集成,並且在編寫事件處理函數時缺乏匿名內部類似乎是一個問題。 有沒有寫這個代碼的更巧妙的方式Groovy中的匿名內部類

import org.apache.wicket.PageParameters 
import org.apache.wicket.markup.html.basic.Label 
import org.apache.wicket.markup.html.link.Link 
import org.apache.wicket.markup.html.WebPage 


/** 
* Homepage 
*/ 
class HomePage extends WebPage { 


    public HomePage(final PageParameters parameters) { 

     // Add the simplest type of label 
     add(new Label("message", "Wicket running!")); 
     def link1 = new ClickHandler("link1") //in java, defined inline 
     add(link1); 
    } 
} 

class ClickHandler extends Link{ 

    ClickHandler(String id) { 
     super(id); 
    } 

    void onClick(){println "Hi"} 
} 

回答

1

我可能是錯的,但不是這個什麼WickeBuilder試圖解決:

檢票生成器工具實現 A G用於構建的roovy Builder Wicket組件樹。

雖然使用構建器使得構建 組件樹更容易,更清晰 給讀者,原來司機是 的事實,Groovy中不允許 匿名內部類。 Wicket 依賴重寫方法 爲許多組件類型提供自定義功能。可以使用Groovy 來編寫Wicket頁面類,但是每個被覆蓋的 類都需要一個名爲 的類定義。可能,但 笨重。

WicketBuilder使用命名閉包來模擬這些 覆蓋。 密碼本質上是可移植的 代碼塊。在引擎蓋下, 構建器創建動態類 覆蓋並在調用命名方法的 時運行閉包。

[...]

+0

這似乎是正確的答案。唉,看來這些項目至今還沒有看到很多活動。無論如何,這個問題肯定會影響其他框架。有一個關於在未來版本的groovy中實現內部類的討論。 – Dan 2009-09-18 04:13:24

+0

事實上,Groovy匿名內部類在1.8的路線圖上http://docs.codehaus.org/display/GroovyJSR/Groovy+Roadmap – 2009-09-18 09:20:01

+1

匿名內部類在Groovy 1.7 – 2009-09-18 13:35:44

1

Ermh。這看起來並不像一個「好」的選擇,但它似乎是「官方」的Groovy替代:

Groovy Alternatives to Inner Classes

+0

我知道的鏈接,卻不得不在下面的說明沒有成功。 – Dan 2009-09-18 02:25:50

0

Groovy的1.7和上述支持匿名內部類。參見groovy 1.7 release notes。對Groovy 1.7.x和檢票口的1.4.x

+0

我正在使用grails,而groovy 1.6.4仍然捆綁着1.2 M3版本的grips。有沒有辦法讓grails使用新版本的groovy? – Dan 2009-10-05 18:49:37