【问题标题】:Java/Groovy: Interface extending generic List interfaceJava/Groovy:扩展通用列表接口的接口
【发布时间】:2017-03-19 15:21:20
【问题描述】:

我有以下代码(在 Groovy 中):

interface IMyList extends List<ISomething> {};

这行得通:

private List<ISomething> list1 = Arrays.asList(new ISomething[1]);

这不是(如下所示的例外情况):

private IMyList list2 = Arrays.asList(new ISomething[1]);

我得到的错误是:

捕获:org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法将具有类“java.util.Arrays$ArrayList”的对象“[null]”转换为类“IMyList”,原因是:groovy.lang.GroovyRuntimeException:找不到匹配的构造函数:IMyList(null)

【问题讨论】:

    标签: generics groovy interface


    【解决方案1】:

    所以我能够使用 Groovy 注释 @Delegate 来解决这个问题(仍然不知道如何在 Java 中做到这一点):

    1) 将接口更改为类:

    class MyList implements List<ISomething> {
           @Delegate List<ISomething> things = Arrays.asList(new ISomething[1]);
    };
    

    2) 更改实例:

    MyList list2 = new MyList(); 
    

    3) 为什么要这样做?我想在一些函数定义中使用多态性:

    class Foo {
       void bar(MyList list) {...}
       void bar(MyOtherList list) {...}
    

    由于类型擦除,这不能使用方法签名中的直接泛型列表来完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2012-11-06
      • 2020-06-09
      • 2020-04-09
      • 1970-01-01
      • 2012-12-19
      相关资源
      最近更新 更多