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)

2つのインターフェースでこれを行うことは何とか可能ですか? もしそうなら、どのように?

ありがとうございました!

ミーシャ

4

3 に答える 3

4

関心のある 2 つのインターフェースを拡張する新しいインターフェースを作成できます。

interface PersonalizedTableFormat extends AdvancedTableFormat, WriteableTableFormat {
}

返されたオブジェクトを新しいインターフェイスにキャストできます。

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

「as」キーワードは、Groovy のasType(Class)メソッドを呼び出すための凝った方法にすぎません。このメソッドは、単一の Class だけを引数として取ります。したがって、複数のインターフェースで「as」を直接使用することはできません (frm のアプローチを採用し、インターフェースを 1 つのスーパーインターフェースに結合しない限り)。

于 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 に答える