java - 创建一个可以转换不同类列表的函数

标签 java oop generics inheritance

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

关于java - 创建一个可以转换不同类列表的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7955993/

相关文章:

java - 这些泛型语句之间有什么区别?

java - 为什么用户定义的异常类在 Java 中是首选/重要的?

oop - 我如何在 lua love2d (OOP) 中使用类

c# - OOP——C# 中的消息传递

java - 如何使用动态创建的类作为泛型?

java - 正则表达式:必须以 'id-' 开头但不能等于但可以以 'id-bitcoin' 开头

java - 如果调用 doOnSubscribe() 返回的对象,RxJava2 dispose() 不起作用

JavaScript ES2015 : Instanciate a class and use variables from class

c# - EntityFramework 中使用 'where' 语句的通用查询

Swift 通用序列可观察歧义