2011-06-21 36 views
8

我即將開始一個社交網絡應用程序項目。當我在設計類時,我決定定義像「commentable」或「likeable」這樣的接口,以便在需要時使用它們。Groovy中的接口

然而,我不知道如何在Groovy中實現它,我正處於學習階段。

下面的例子是從Groovy的文檔,

interface X 
{ void f(); void g(int n); void h(String s, int n); } 

x = [ f: {println "f called"} ] as X 
x.f() 
//x.g() // NPE here 

說這是我的接口之一,我想用一個稱爲B實現這個接口類..

應我只是說B爲X,在相關的控制器?

如何在域圖層中做到這一點?如果一個Z類是,讓我們說「可評論的」,我是否應該創建一個名爲Comment的域類,並說Z有許多評論?並使用控制器層的接口?

什麼是Groovy方式正確地做到這一點?我有點困惑,稍微澄清一下會很好。

在此先感謝

回答

18

您展示的例子不是實現自己的接口時要使用正確的。這是僅部分實現接口的一種便捷方式。在這個例子中只有f方法被實現,所以其他的失敗如你所見。當你有一個很大的接口但是隻能在被測試的類中調用幾個方法時,這是非常有用的,所以你不需要實現整個接口。

您實現在Groovy接口,這與Java:

interface Math { 
    int add(int a, int b) 

    int multiply(int a, int b) 
} 

class SimpleMathImpl implements Math { 
    int add(int a, int b) { 
     a + b 
    } 

    int multiply(int a, int b) { 
     a * b 
    } 
} 
+0

你確定我沒有看到任何像這樣的單一實例即使不知道implements關鍵字 – add9

+0

所以就設計問題,如果我可以定義存在的Groovy一個類似於Java的界面,在Controller中實現它並在域中使用hasMany將是一件正確的事情? – add9

+3

Groovy(或Grails)中使用接口幾乎沒有什麼好處,因爲您可以調用任何您想要的方法 - Groovy支持「鴨子打字」。一些插件使用它們,但更多的是沒有方法的「標記」接口,它們只是用於對類型進行分類,因此您可以檢查「instanceof MyInterface」並相應地採取行動。但除此之外,真的沒有理由使用接口。 –