我写了一个API,其中一个方法以java.util.Map作为参数。提供的映射包含必须按插入顺序排序的数据。因此,我专门提到了该参数为java.util.LinkedHashMap。但是我的一位同事要求我仅将参数声明为Map,并且应该通过API的javadoc告知客户端。

我不明白为什么java.util.LinkedHashMap是一种不好的做法,为什么我应该在接口中传递。这不是不必要的工作吗,如果客户不注意文档,可能会导致功能错误。(我知道他们应该这样做)。

最佳答案

您的API对参数有两个要求:


这是一个Map
按照插入顺序进行迭代。


LinkedHashMap满足这些要求,但是任何地方都没有文档或规范说明所有插入顺序的映射都必须从LinkedHashMap继承。通过指定LinkedHashMap,您将保证该参数满足您的要求,但是,您也将禁止具有Map并按所需顺序进行迭代但碰巧使用其他实现的人使用API​​。

如果有人附带一些自定义ArrayBackedHashMap怎么办?他们有一个满足您实际要求的对象(Map和迭代顺序),但是将您声明为LinkedHashMap会使它无法正常工作。

通常,如果您希望自己的代码可以被其他人使用(以及其余大部分时间),那么您应该尝试接受任何符合您实际要求的内容。在这种情况下,您的第二个要求没有正式与任何声明的类型绑定在一起的事实意味着您不应尝试使用类型来强制执行它。而是在JavaDoc中说明要求。

关于java - LinkedHashMap或 map ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35373855/

10-14 08:57