Java / Groovy:扩展通用List接口的接口

时间:2017-03-19 15:21:21

标签: generics groovy interface

我有以下代码(在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:无法转换对象&#39; [null]&#39; with class&#39; java.util.Arrays $ ArrayList&#39;上课&#39; IMyList&#39;由于:groovy.lang.GroovyRuntimeException:找不到匹配的构造函数:IMyList(null)

1 个答案:

答案 0 :(得分:1)

所以我能够使用Groovy注释 @Delegate 解决这个问题(仍然不知道如何在Java中执行此操作):

1)将接口更改为class:

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) {...}

由于类型擦除,无法使用方法签名中的直接通用列表来完成此操作。