【问题标题】:Method iterator() declared in java.util.Collection and in java.lang.Iterable, its superinterface?在 java.util.Collection 和 java.lang.Iterable 中声明的方法 iterator(),它的超接口?
【发布时间】:2016-02-15 08:06:36
【问题描述】:

有人可以向我解释为什么Iterator<E> iterator(); 方法是在java.util.Collection 中定义的吗?收藏已扩展java.lang.Iterable;这种方法是多余的。这是为了方便吗?

【问题讨论】:

    标签: java collections


    【解决方案1】:

    Collection interface 是在 Java 1.2 中通过 Collections API 引入的。当时出现了iterator 方法。然而,Iterable interface 直到 Java 1.5 才引入。 Collection 显式定义iterator 的原因是因为它早于IterableCollection 返回 Iterator 的想法早于 Iterable 的想法。

    【讨论】:

    • 好了,为什么java1.5没有从Collection中删除呢?不向后兼容吗?
    • 在使Collection 扩展新的Iterable 接口时,没有理由将其从Collection 中删除。
    • 删除它会破坏向后兼容性。也就是说,人们在 1999 年编写的程序使用了Iterator i = myList.iterator()。从接口中删除方法会导致这些程序停止编译。
    • JDK 中有很多旧代码留在原地,用于继续支持在早期 Java 版本中开发的用户应用程序。每当 Java 团队推出新设计时,他们通常会将以前的代码标记为“已弃用”,因此当您编译时,您会看到不再推荐您正在使用的代码的警告。您甚至可以使用 @Deprecated 注释 (docs.oracle.com/javase/7/docs/technotes/guides/javadoc/…) 自己弃用代码。
    • @IlyaK。可以说他们没有删除它是为了关注"open/closed principle"(Java 工程师喜欢保持向后兼容性)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多