【问题标题】:Genericized commons collection通用公共集合
【发布时间】:2010-09-22 16:58:06
【问题描述】:

我很惊讶Apache Commons Collections 项目仍然没有让他们的库泛型感知。我真的很喜欢这个库提供的功能,但是缺乏对泛型的支持是一个很大的障碍。有一个Lavalabs fork of Commons Collections which does support generics,它似乎声称向后兼容,但是当我尝试更新到这个版本时,我的 Web 应用程序无法启动(在 JBoss 中)。

我的问题是:

  • 是否有人已成功从 Commons Collections 更新到上述分叉
  • 如果 Commons Collections 有任何计划添加对泛型的支持

顺便说一句,我知道 Google 集合,但在 API 稳定之前不愿意使用它。

干杯, 唐

【问题讨论】:

    标签: java collections upgrade apache-commons binary-compatibility


    【解决方案1】:

    一般的 BC 问题是包 org.apache.commons.collections重命名为 org.apache.commons.collections15。我不知道这种变化的原因。尝试重命名它,重新编译库并再次运行您的应用程序。

    我在commons-collections-3.2.1.jar(来自 Apache)和collections-generic-4.01.jar(来自 Lavalabs)上使用Clirr 工具发现了这个问题。

    【讨论】:

      【解决方案2】:

      阅读收藏博客,它提供了对收藏框架的完整理解。 http://tech.konnectingtheworld.com/2010/09/a-note-on-java-collections/

      如果您觉得您的查询没有得到答复,请与我联系。我会尽量为您提供信息。

      【讨论】:

        【解决方案3】:

        Commons Collections 3.1 available here 有一个通用端口,我们已经使用了几年了。做得很好,而且由于它严格基于现有的 Commons 源,它有一个稳定的 API。

        不过,它可以使用更新来符合 Commons Collections 3.2。

        【讨论】:

          【解决方案4】:

          我说,咬紧牙关,切换到 google-collections,至少对于新代码。

          我知道您担心稳定性,但 google-collections 库在 1.0 版本中非常接近稳定 - 在开发人员列表中闲逛或观看他们报告的问题,他们已经对更改非常谨慎,尤其是打破那些。当前版本与(似乎即将到来的)1.0 最终版本之间的任何不兼容都将非常小。

          另外,如果您担心稳定性,请选择一个版本(例如当前版本,1.0 RC4),然后......不要升级。当然,您不会获得任何新功能,但 commons-collections 在几年内没有以有意义的方式更新,所以您真的会更糟吗?至少你对泛型和(恕我直言)更好的 API 感到困惑。

          【讨论】:

            【解决方案5】:

            考虑Google Collections。来自他们的Javalobby interview

            [Google Collections] 使用 Java 5 特性构建:泛型、枚举、协变返回类型等。在编写 Java 5 代码时,您需要一个能够充分利用该语言的集合库。此外,我们付出了巨大的努力使该库完整、健壮并与 JDK 集合类保持一致。

            【讨论】:

            • 我完全赞成这个答案。说真的,如果阿帕奇平民想要留在他们集体的黑暗时代小屋中(无论出于何种原因),那么这是他们的选择。使用不支持现代 Java 功能的库来编写新项目是很尴尬的。
            • Google 收藏不再维护,现在是 Guava 的一部分
            【解决方案6】:

            我无法想象你有什么理由不使用谷歌收藏。使用该库非常简单。

            对于我的工作,我同时使用 apache 集合和 google 集合。

            你能解释一下为什么你不能使用谷歌收藏吗?

            问候

            【讨论】:

            • 一个原因是因为我的应用程序已经包含公共集合(例如,作为另一个 Apache 库的传递依赖项)。如果可能的话,我更愿意升级到引入另一个依赖项的通用集合的泛型版本。
            【解决方案7】:

            有贡献。查看jira

            还有一个JDK5 branch

            我们确实希望添加泛型并将 Commons Collections 更新到 1.5(和 1.6)。最大的问题是如何解决向后兼容性问题。人们对那里有非常不同的看法。对于某些 Commons 组件,较新的 JDK 几乎要求重写新的 JDK,恕我直言。

            在 ApacheCon 期间,我感到有几个人希望推动这项工作。这只是一项艰巨的任务。

            欢迎访问 dev@commons.apache.org

            干杯, 托斯滕

            【讨论】:

            • 谢谢托斯滕。我有点不愿意在邮件列表中提出这个问题,因为我预计它已经被讨论了一百万次。我去看看 JDK5 分支
            • 问题:你知道sun不再支持JDK 1.4吗?
            • 请提出来。我们需要压力:)
            • @geek:是的,你只需要为支持付费
            【解决方案8】:

            鉴于 Jakarta 自己的 internal debate 的最后一个词是在 12 月 7 日,我会说 Apache 不会接受泛型,而是为像 Google Collections 这样的 Java5 友好的领域敞开大门。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-12-05
              • 2013-12-29
              • 2012-01-26
              • 2016-10-11
              • 1970-01-01
              • 1970-01-01
              • 2012-11-07
              • 2013-05-15
              相关资源
              最近更新 更多