Groovy 'as' keyword to implement 2+ interfaces
I would like to implement a Glazed List that has both an AdvancedTableFormat and WritableTableFormat interface.
I am reading here: http://www.jroll开发者_Python百科er.com/aalmiray/entry/glazedlists_groovy_not_your_regular
and for one interface it seems this is possible in Groovy with the "as" keyword:
# return new EventTableModel(linksList, [
# getColumnCount: {columnNames.size()},
# getColumnName: {index -> columnNames[index]},
# getColumnValue: {object, index ->
# object."${columnNames[index].toLowerCase()}"
# }] as TableFormat)
Is it somehow possible to do this for two interfaces? If so how?
Thank you!
Misha
You can create a new interface that extends the two interfaces you are interested in.
interface PersonalizedTableFormat extends AdvancedTableFormat, WriteableTableFormat {
}
You can cast the object you return to the new interface.
return object as PersonalizedTableFormat;
The "as" keyword is just a fancy way of invoking Groovy's asType(Class) method, which takes only a single Class as an argument. Therefore you can't directly use "as" with more than one interface (unless you take frm's approach and combine the interfaces in one super interface).
I wonder if you want to implement 2 or more interfaces on the fly, and do not prefer to 'hard code' like
interface abc extends aaa,bbb,ccc {}
?
May be you can try the following code:
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();
精彩评论