我想实现一个同时具有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)
以某种方式可以为两个接口执行此操作吗?如果是这样的话?
谢谢!
Misha
答案 0 :(得分:4)
您可以创建一个扩展您感兴趣的两个接口的新界面。
interface PersonalizedTableFormat extends AdvancedTableFormat, WriteableTableFormat {
}
您可以将返回的对象强制转换为新界面。
return object as PersonalizedTableFormat;
答案 1 :(得分:4)
“as”关键字只是调用Groovy的asType(Class)方法的一种奇特方式,它只接受一个Class作为参数。因此,您不能直接在多个接口上使用“as”(除非您采用frm的方法并将接口组合在一个超级接口中)。
答案 2 :(得分: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();