2

我想实现一个同时具有 AdvancedTableFormat 和 WritableTableFormat 接口的 Glazed List。

我在这里阅读: http ://www.jroller.com/aalmiray/entry/glazedlists_groovy_not_your_regular

对于一个接口,在 Groovy 中使用“as”关键字似乎是可能的:

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

是否有可能为两个接口执行此操作?如果有怎么办?

谢谢!

米莎

4

3 回答 3

4

您可以创建一个新接口来扩展您感兴趣的两个接口。

interface PersonalizedTableFormat extends AdvancedTableFormat, WriteableTableFormat {
}

您可以将返回的对象投射到新界面。

return object as PersonalizedTableFormat;
于 2010-06-20T09:57:22.667 回答
4

“as”关键字只是调用 Groovy 的asType(Class)方法的一种奇特方式,该方法只接受一个 Class 作为参数。因此,您不能直接将“as”与多个接口一起使用(除非您采用frm的方法并将接口组合在一个超级接口中)。

于 2010-06-20T21:18:54.230 回答
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();
于 2011-11-18T07:29:02.333 回答