我不会通过对接口进行编码而失去功能吗?列表与数组列表

Don't I lose functionality by coding to an Interface? List vs ArrayList

(1) List<?> myList = new ArrayList<?>();

(2) ArrayList<?> myList = new ArrayList<?>();

我知道对于 (1),可以交换 List 接口的实现。似乎(1)通常在应用程序中使用,而不考虑需要(我自己总是使用它)。

我想知道 (1) 我没有特定的 ArrayList 功能吗?我只有一般的列表功能。所以我无权访问特定于数组列表的任何内容?如果是这样?我怎样才能访问 ArrayList 的特定功能?我是用 ArrayList 交换 List 还是可以将 List 转换为 ArrayList?

您通常会向 public 公开接口,而将具体实现留给自己。这是为了更容易将它换成不同的东西,因为消费者只知道它是一个列表。如果你只在你自己的对象中使用引用,那么就没有必要隐藏具体的实现。如果您需要一个数组列表,那么无论如何都要将引用存储为数组列表!