我在 Java 编程语言中观察到,我们的代码如下:
List mylist = new ArrayList();
为什么我们不应该使用以下而不是上面的?
ArrayList mylist = new ArrayList();
我在 Java 编程语言中观察到,我们的代码如下:
List mylist = new ArrayList();
为什么我们不应该使用以下而不是上面的?
ArrayList mylist = new ArrayList();
虽然第二种选择是可行的,但在大多数情况下第一种更可取。通常,您希望对接口进行编码,以使您的代码更少耦合且更具凝聚力。这是一种数据抽象,mylist 的用户(我建议使用 myList)并不关心它的实际实现,只关心它是一个列表。
我们可能希望在某个时候更改底层数据结构,并且通过保留引用,我们只需要更改声明。
如果您使用 ArrayList,您是说它必须是 ArrayList,而不是任何其他类型的 List,并且要替换它,您必须更改对该类型的每个引用。如果您使用List
,则表明列表没有什么特别之处,它被用作普通列表。只需更改一行即可将其更改为另一个列表。
只是为了避免紧耦合。从理论上讲,您不应该将自己束缚在实现细节上,因为它们可能会发生变化,这与应该是稳定的接口契约相反。此外,它确实简化了测试。
您可以将接口视为所有实现类必须遵守的整体契约。相反,特定于实现的细节可能会有所不同,例如数据在内部的表示方式、访问方式等 - 您永远不想依赖的信息。