【问题标题】:Groovy 'as' keyword to implement 2+ interfacesGroovy 'as' 关键字来实现 2+ 接口
【发布时间】:2011-03-05 22:06:34
【问题描述】:

我想实现一个同时具有 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)

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

谢谢!

米莎

【问题讨论】:

    标签: groovy glazedlists


    【解决方案1】:

    我想知道您是否想即时实现 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();
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        interface PersonalizedTableFormat extends AdvancedTableFormat, WriteableTableFormat {
        }
        

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

        return object as PersonalizedTableFormat;
        

        【讨论】:

        • 这很整洁。顺便说一句,我可以在一个类 within 中实现一个接口,还是必须始终在一个类之外实现它?谢谢!
        • Groovy 接口的规则与 Java 接口的规则相同。您可以在类中将 PersonalizedTableFormat 定义为私有接口,并像在示例中那样“动态”创建匿名内部类型。
        猜你喜欢
        • 2020-04-12
        • 1970-01-01
        • 1970-01-01
        • 2017-01-08
        • 1970-01-01
        • 2011-04-21
        • 2015-03-07
        • 2010-12-18
        • 1970-01-01
        相关资源
        最近更新 更多