【发布时间】:2011-10-31 15:41:55
【问题描述】:
我有 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转换为A。为list of Z to A和list of Z to B编写一个转换方法要比编写一个两者都做的通用方法要简单得多。 -
如果
OInterface是一个接口,它将不支持字段,因此tmp.a = ...是不可能的。 -
在您的示例中,您说 B 类实现 OInterface 和 Z 类,但在伪代码中您希望 myFunction 将 Z 转换为 OInterface。除非 Z 也实现了 OInterface,否则 A Z 并不总是可转换为 OInterface。你的意思是 List
myfunction(List mylist)? -
您需要提供更多信息。您表明您想使用相同的方法
myfunction(List<Z> my list)来返回List<A>或List<B>,这在Java 中根本不可能:您不能基于返回类型重载。您提供的签名List<OInterface> myfunction(List<Z> mylist)将始终采用Z对象的List(正如您所说,不实现OInterface),并返回其他一些的列表实现OInterface的对象(A或B,实现OInterface的其他一些类,或所有三者的混合)。这就是你想要的吗?
标签: java oop generics inheritance