【发布时间】:2022-01-12 09:45:23
【问题描述】:
我有一个父类 Item 和多个子类 itemA、itemB 等。
现在我想要一个方法,它采用 2 个相同类类型的 ArrayList(例如 itemA,itemA)并根据父类中的方法映射项目(所以我的想法是制作一个采用 2父类的 Arraylists,因此它接受被强制转换为父类的子类的 Arraylists。
以下是该方法的外观:
HashMap<Item,Item> mapping(ArrayList<Item> prop1, ArrayList<Item> prop2)
{
//Content of the method not that important
}
而且我应该能够使用子类的 Arraylists 调用该方法,例如
Arraylist<ItemA> list1 = ...;
ArrayList<ItemA> list2 = ...;
mapping(list1, list2);
但显然你不能轻易地在 Arraylist 之间进行转换。我唯一的想法是为 3 个类 itemA、itemB、itemC 编写 3 个单独的方法。有人有更好的主意吗?
【问题讨论】:
-
为什么不使用类型参数绑定的泛型方法?
-
顺便说一句:声明
List<...>,Map<...>,基于接口的变量。 -
@JoopEggen 你能详细说明一下吗?
-
这是惯例;你会在任何地方看到它 - 有充分的理由。它被称为针对接口编程。实现类不影响使用,因此您可以更改实现。更重要的是:当接受 List 参数而不是 ArrayList 时,方法更通用。作为方法的返回结果,您可以返回任何合适的列表,例如
List.emptyList()、Collections.singletonList(value)或其他。 -
拥有多种实现可供使用是该语言的一个不错的方面:一个 Map 可以是 HashMap,或者在键 TreeMap 上排序,或者在插入 LinkedHashMap 上排序。将此与脚本语言进行比较,您只有一个 moloch。
标签: java inheritance arraylist methods