【发布时间】:2016-06-08 10:05:51
【问题描述】:
我一直在寻找 Stack Overflow,但我不知道这是否可能,但这是我的问题:
我有两种类型 A 和 B 从 AbstractType 扩展,
然后我想要一个Map,里面有两种类型的对象:
Map<String,List<? extends AbstractType>> map = new HashMap();
map.put("toto",new Arraylist<A>);
map.put("sacha",new Arraylist<B>);
List<A> a = (List<A>)map.get("toto");
我有一个完全可以理解的安全警告,但这是我发现完成这项工作的最佳方式。
我发现的唯一安全选项是有两个不同的列表,但我更喜欢映射以避免多个 if 情况。
我希望有人会有想法。
【问题讨论】:
-
你怎么知道
map.get("toto")是List<A>而不是List<B>或List<C>? -
为什么不创建相应的 POJO 并根据需要覆盖 hashCode 和 equals 方法并保留一个 Set
-
请详细说明“multiple if case”的想法。你知道“toto”自动意味着
List<A>吗?或者您是否需要测试map中的值以确定它是A还是B品种? -
是的,我知道编译器不知道返回类型是 A 或 B 或 C 的列表。但对我来说,当我从代码的一部分调用该方法时,我知道返回类型是 A 的列表,另一部分是 B 的列表。
-
这就是为什么我不明白您所说的“多个 if case”是什么意思。既然你已经知道了,你需要做什么样的“如果”?
标签: java list generics dictionary