Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回LinkedHashMap的方法的签名<;K、 V>;_Java_Collections_Interface - Fatal编程技术网

Java 返回LinkedHashMap的方法的签名<;K、 V>;

Java 返回LinkedHashMap的方法的签名<;K、 V>;,java,collections,interface,Java,Collections,Interface,假设我希望方法foo返回LinkedHashMap(数据按插入顺序排序)。原因是这个映射将由数据库填充,我希望它反映查询返回的顺序。定义方法签名的正确方法是什么 public LinkedHashMap foo() publicmap foo() 第一种方法的优势是向客户宣传地图已订购,第二种方法更一般。当然是第二种方法-您应该更喜欢接口并隐藏实现-如果您将来决定使用另一种Map实现,则不需要在使用此代码的其他方法中更改任何内容 还请注意,不允许按返回类型重载方法,因此使用常规类型似乎是合适的这

假设我希望方法
foo
返回
LinkedHashMap
(数据按插入顺序排序)。原因是这个
映射将由数据库填充,我希望它反映查询返回的顺序。定义方法签名的正确方法是什么

  • public LinkedHashMap foo()
  • publicmap foo()

  • 第一种方法的优势是向客户宣传地图已订购,第二种方法更一般。

    当然是第二种方法-您应该更喜欢接口并隐藏实现-如果您将来决定使用另一种
    Map
    实现,则不需要在使用此代码的其他方法中更改任何内容


    还请注意,不允许按返回类型重载方法,因此使用常规类型似乎是合适的

    这取决于如何使用/专门化此方法。不过,我建议采用第二种方法


    考虑一个场景,其中需要重写此方法以返回排序值(例如,
    TreeMap
    )或未排序/无序值(
    HashMap
    )。在这种情况下,我们将无法覆盖此方法,必须创建另一个方法。

    但是在这种情况下,让客户了解实现不是很好,也就是说,地图是订购的?如果客户必须知道地图的类型,并且您将使用
    instanceof
    作为结束,那么您在这里应该没有问题;)原因是这个映射将由一个数据库填充,我希望它反映从查询返回的顺序。理想情况下,应该有一个OrderedMap接口,ala SortedMap,然后我会说您可以返回它。问题是,这种方法的客户是否需要知道这一点?或者它只是迭代,瞧,项目只是排序的。在这种情况下,最好记录一下顺序是什么。LinkedHashMap可能具有访问顺序,或者以调用方可能不期望的方式对其进行排序,以便更好地记录它并且它仍然会保持插入顺序