我有以下代码(在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)
答案 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) {...}
由于类型擦除,无法使用方法签名中的直接通用列表来完成此操作。