2010-06-20 47 views
2

我想實現一個具有AdvancedTableFormat和WritableTableFormat接口的Glazed List。Groovy'as'關鍵字來實現2+接口

我讀這裏: http://www.jroller.com/aalmiray/entry/glazedlists_groovy_not_your_regular

和一個接口,似乎這是有可能在Groovy與「爲」關鍵詞:

# return new EventTableModel(linksList, [ 
#  getColumnCount: {columnNames.size()}, 
#  getColumnName: {index -> columnNames[index]}, 
#  getColumnValue: {object, index -> 
#   object."${columnNames[index].toLowerCase()}" 
#  }] as TableFormat) 

是它在某種程度上可能爲兩個接口做到這一點?如果是這樣如何?

謝謝!

米莎

回答

4

您可以創建一個擴展兩個接口,你有興趣在一個新的接口。

interface PersonalizedTableFormat extends AdvancedTableFormat, WriteableTableFormat { 
} 

你可以投你回到新接口的對象。

return object as PersonalizedTableFormat; 
+0

這是整潔。順便說一句,我可以實現一個接口_within_一個類,或者我必須始終在一個之外實現它嗎?謝謝! – 2010-06-20 22:13:33

+0

Groovy接口的規則對於Java接口是相同的。您可以在您的類中將PersonalizedTableFormat定義爲專用接口,並像您在示例中那樣「隨時」創建匿名內部類型。 – frm 2010-06-20 22:26:07

4

的「爲」關鍵字只是調用Groovy的asType(Class)方法,該方法只需要一個單一的類作爲參數的一個奇特的方式。因此,您不能直接在多個接口中使用「as」(除非您採用frm的方法並將接口合併到一個超級接口中)。

2

我想知道你是否想要實現2個或更多的接口,並且不喜歡'硬代碼'如
interface abc extends aaa,bbb,ccc {}

可能是你可以試試下面的代碼:

import static java.util.Collections.sort 
def doClose(Closeable c){ 
    c.close(); 
} 
def o = new Object() 
o.metaClass{ 
    compare{Object a,String b-> return a.size() - b.size()}; 
    close{println 'Lights out - I am closing'}; 
} 
o = new ProxyGenerator().instantiateDelegate([Comparator, Closeable], o) 
def items = ['a', 'bbb', 'cc'] 
sort(items, o); 
println items; 
doClose(o); 
println o.class.getInterfaces();