我有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];

10-08 19:28