开发者

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();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜