0

可能重复:
为什么在 Java 中使用接口名称声明变量?
列表应该如何转换为它们的具体实现?

例子:

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

谢谢。

4

4 回答 4

3

这通常是为了让您稍后可以在另一个实现中交换,并且仍然让代码运行相同。例如,如果您随后决定使用 aTreeMap而不是 a HashMap,您只需更改实例化步骤,其余代码仍然可以正常工作。

于 2012-08-18T16:39:19.063 回答
3

它是一种编程实践,称为对接口编程

于 2012-08-18T16:39:39.890 回答
1

您可以在不影响其余代码的情况下切换实现(例如,在您的示例中切换到 a TreeMap),因为它将使用基类,即Map.
它将您的代码解耦,并且被认为是针对接口而不是具体实现进行编码的良好编程实践

于 2012-08-18T16:44:23.517 回答
1

契约式设计或“接口编程”是确保您的代码仅使用接口公开的属性/方法的原则,更重要的是,在任何给定时间使用一个主要接口。如果您一次使用多个接口,这通常表示耦合更紧密。

通常,您也不应该直接在代码中实例化对象。您应该将该工作委托给外部实体,以便使用的实现的任何更改都可以在一个地方完成。

有一篇 Dobb 博士的期刊文章指出应该禁止使用“new”关键字(确切的标题类似于“new is verboten”),但我现在找不到指向它的链接。

于 2012-08-18T16:50:27.373 回答