java - ArrayList<Integer> list = new ArrayList<Integer>(); 之间的区别和 Collection<Integer> list1 = new ArrayList<Integer>();

标签 java

我不明白:

  1. ArrayList<Integer> list = new ArrayList<Integer>();
  2. Collection<Integer> list1 = new ArrayList<Integer>();

ArrayList扩展实现接口(interface)的类 Collection , 所以类 ArrayList工具 Collection界面。也许list1允许我们使用 Collection 中的静态方法界面?

最佳答案

接口(interface)没有静态方法 [在 Java 7 中]。 list1 只允许访问 Collection 中的方法,而 list 允许访问 ArrayList 中的所有方法。


最好用尽可能不具体的类型来声明一个变量。因此,例如,如果出于任何原因将 ArrayList 更改为 LinkedListHashSet,则不必重构大部分代码(例如,客户端类)。

假设您有这样的东西(仅用于说明目的,不可编译):

class CustomerProvider {
    public LinkedList<Customer> getAllCustomersInCity(City city) {
        // retrieve and return all customers for that city
    }
}

然后您决定实现它并返回一个 HashSet。也许有一些客户端类依赖于您返回 LinkedList 并调用 HashSet 没有的方法(例如 LinkedList.getFirst() )。

这就是为什么你最好这样做:

class CustomerProvider {
    public Collection<Customer> getAllCustomersInCity(City city) {
        // retrieve and return all customers for that city
    }
}

关于java - ArrayList<Integer> list = new ArrayList<Integer>(); 之间的区别和 Collection<Integer> list1 = new ArrayList<Integer>();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14163291/

相关文章:

java - 在 JUnit 测试类中哪里配置 log4j?

java - 如何在 Java 中使用匿名类重载方法?

java - Mockito 在 Spy 上使用 doAnswer

java - 为什么Spring MVC会以404响应并报告“在DispatcherServlet中未找到带有URI […]的HTTP请求的映射”?

java - Gradle:将 native 库与现有的外部库链接

java - 当我滚动浏览 webview 应用程序时,我的应用程序卡住

java - 修复 Java 字符串转换期间的小数位

java - 在 Lucene 索引中使用 RegexQuery(不是任何其他)搜索 '$'

java - 预加载相关实体

java - 如何从另一个包加载类?