我对设计方法有疑问,为什么我们将代码实现到接口。在原始数据类型中非常注意到这一点。就像我没有区分这两者:
Map<Integer, String> mymap = new HashMap<Integer, String>();
和
HashMap<Integer, String> mymap = new HashMap<Integer, String>();
这两者有什么区别吗?我的意思是我们将要使用mymap
的每个地方在两种情况下都会保持相同。
如果这个问题似乎毫无用处,我很抱歉,但我真的没有意识到这将会在以后使用mymap
的地方产生什么影响。请帮帮忙?
谢谢..
注意 - 我已经在SO上看过this问题,但它没有给出我想要的内容。
答案 0 :(得分:4)
第二个选项限制您始终使用HashMap,即使有一天TreeMap可能更有用。
在第一个中,您可以更轻松地更改特定实现 - 您只需更改一行代码。如果从方法返回地图,它尤其可见 - 方法返回类型不必更改。
编码到接口也有助于在测试期间模拟对象,但我认为这不是这种情况。
答案 1 :(得分:1)
由于mymap可以使用Map
的不同实现在其他地方实例化,因此您不应该依赖它作为使用它的代码中HashMap
的实例。
答案 2 :(得分:0)
使用Map mymap
可以让您稍后更改实施。例如,如果您在某个时刻需要订购mymap
,则只需将初始化更改为LinkedHashMap
即可。
答案 3 :(得分:0)
如果你只是在你的类型中使用它(意思是:私有)并自己实例化它,它并没有真正的区别。
如果您的类型的公共接口公开了Map与HashMap,它就开始变得有趣了。
答案 4 :(得分:0)
在您提出的具体实例中,它可能没有什么区别,但是让自己习惯于在声明中始终使用界面是一种好习惯,因为有合理的实例,您需要< / strong>那种灵活性。
答案 5 :(得分:0)
前者允许您更改为:
Map<Integer, String> mymap = new TreeMap<Integer, String>();
例如,,不会破坏所有其余代码。
一个更小的优点是您的IDE可以向您显示接口的方法,而不是(可能更多的)实现方法。