我有3节课
Z级
calss A实现OInterface,而calss B实现OInterface
。
我想创建一个将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);
当然这不会编译,它更像伪代码来显示我想做什么。
有办法实现吗?
最佳答案
由于Z无法实现OInterface
,因此您将永远无法通过任何方法将Z转换为OInterface
。显然,这是设计使然-首先具有OInterface
的根本原因是要确保始终可以确保继承对象的形状。
您要么必须使Z实现OInterface
,要么编写一种将Z转换为A和/或Z转换为B的方法,然后创建A或B的列表。
只有这样,您才能将其视为OInterface元素的列表-然后可以执行以下操作:
OInterface anObject = aaa[0];