我用相关产品代表品牌,如下所示:
在代码中,该符号由表示TreeMap<String, TreeSet<String>>
,因为品牌将保持字母顺序排序,并且不强制使用重复的品牌或产品。通过此行创建:
private TreeMap<String, TreeSet<String>> products = loadProducts(RAW_PRODUCTS);
我仍在学习Java,但是,在尽可能的地方使用最通用的类型不是好OO的准则之一吗?所以我有这种方法,它采用相同的方法Map
并进行一些处理:
void initProductList(final Map<String, Collection<String>> products)
你可以看到和TreeMap
已经成为Map
和TreeSet
已经成为Collection
。但是每当我尝试致电:
initProductList(products);
编译器错误显示:
The method initProductList(Map<String,Collection<String>>) in the type AddAlertItem is not applicable for the arguments (TreeMap<String,TreeSet<String>>)
为了更易于阅读,这是它的困惑之处:
Map<String,Collection<String>>
TreeMap<String,TreeSet<String>>
TreeSet
和之间的区别在于Collection
它。但是我不确定要进行哪些更改才能使其正常工作。我可以向下转换方法参数以TreeSet
直接指定参数,但后来我觉得自己很局限,因为我可能想在Collection
其他地方使用另一种类型。
有什么我不介意的,还是在不放弃更通用的方法参数的情况下进行这项工作的方法?
我在Google和此处进行了一些搜索,但未找到任何处理此问题的人。
Collection
在“集合”层次结构中相当高。为什么不稍微加强API参考,而去Set
呢?
void initProductList(final Map<String, ? extends Set<String>> products) {
}
这样,很明显您正在使用Set
,而不是List
其他某种集合类型,因为集合的行为与列表不同。
哦,它也会编译。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句