我想创建一个将Z列表转换为OInterface
列表的函数List<OInterface > myfunction(List<Z> mylist){
List <OInterface > ret=new List <OInterface >;
for (Z z : mylist){
OInterface tmp=new OInterface ()
tmp.a=z.a
tmp.b=z.b
ret.add (tmp)
}
return ret;
}
我可以这样使用:
List<Z> zzz=...
List<A> aaa=myfunction(zzz);
List<B> aaa=myfunction(zzz);
当然这不会编译,它更像是伪代码来显示我想要做的事情。
有没有办法实现这个?
答案 0 :(得分:1)
由于Z未实现OInterface
,您将永远无法通过任何方法将<转换'Z转换为OInterface
。这显然是设计的 - 你首先OInterface
的原因是确保你总能保证继承对象的形状。
您要么必须使Z实现OInterface
,要么编写一个方法将Z转换为A和/或Z转换为B,然后创建A或B列表。
只有这样,您能否将其视为OInterface元素列表 - 您可以执行以下操作:
OInterface anObject = aaa[0];
答案 1 :(得分:0)
对于令人困惑的名称感到抱歉,请调用静态方法进程:
new Processor<Z,A> () {
public A process(Z z){
A a = new A();
a.addSomethingFrom(z);
return a ;
}
}
作为参数
public interface Processor<A,R> {
R process(A a);
}
public static <Input, Output> List<Output> process(List<Input> as, Processor<Input, Output> processor) {
List<Output> ret = new ArrayList<Output>();
for (Input a: as) {
ret.add(processor.process(a));
}
return ret;
}