【问题标题】:no such method error: ImmutableList.copyOf()没有这样的方法错误:ImmutableList.copyOf()
【发布时间】:2010-06-27 03:48:59
【问题描述】:

我正在使用 Guava-05-snapshot 和 Sun 的 JDK 1.6 代码在执行这个 sn-p 时崩溃了:

List<String> badpasswords = Lists.newArrayList( Password.badWords);
Collections.sort(badpasswords);
ImmutableList<String> tmp = ImmutableList.copyOf(badpasswords);

特别是在 ImmutableList.copyOf() 调用上。 该代码使用旧的 Google-Collections 代码已经运行了几个月。

java.lang.NoSuchMethodError: com.google.common.collect.ImmutableList.copyOf(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableList;

Password.badWordsImmutableSet&lt;String&gt;,可写数组的创建和排序工作完美。但尝试将 Array 转换为 ImmutableList 失败。

【问题讨论】:

标签: java guava


【解决方案1】:

Guava 是完全兼容的 Google Collections 超集——我们没有以不兼容的方式更改任何内容。 (这是通过针对最新的 guava jar 运行整个 Google Collections 测试套件(广泛)来测试的。)

我相信您的类路径中仍有一份 google-collect-*.jar 的副本。要么是明确的,要么是因为其他一些 jar 包含它而没有重新打包它。你只需要找到它并删除它。

在 Google Collections 中,有一个 ImmutableList.copyOf(Iterable) 方法,但没有公共 ImmutableList.copyOf(Collection) 方法。这很好,因为集合也是可迭代的。在 Guava 中,我们添加了 Collection 重载。这是完全兼容的,因为所有用于编译的源代码仍然可以,并且任何先前编译的源代码仍将简单地引用原始方法。

如果您针对 Guava 进行编译,然后针对 Google Collections 运行,就会出现问题。我相信这很可能正在发生。

【讨论】:

  • 问题是 Netbeans 在缓存中保留了太多东西的副作用。 “清理并构建”并没有解决问题。我做了一个完整的清理并构建到项目中的每个 jar 中。解决方案是退出 Netbeans,转到 ~/netbeans/6.7/var/cache 并执行 rm -rf *
  • “Guava 是完全兼容的 Google Collections 超集” - 显然不再是了? code.google.com/p/gdata-java-client/issues/detail?id=344#c2
  • 是的,有些东西确实已经达到了“弃用 18 个月”的使用寿命,这是真的。
  • (仅截至 2011 年 12 月的 11.0 版。)
  • 我遇到了类似的问题,但使用的是 com.google.common.collect.Iterables.getFirst。感谢您的解决方案!
【解决方案2】:

适用于我使用来自 Maven 的官方(非快照)guava-r05 版本。顺便说一句,这可能是做同样事情的更好方法:

ImmutableList<String> sorted = Ordering.natural()
    .immutableSortedCopy(Password.badWords);

【讨论】:

    【解决方案3】:

    如果将web应用部署到WebLogic 12c时出现错误(但guava JAR在WEB-INF/lib中),weblogic.xml中的如下配置将有助于解决:

    <container-descriptor>
        <prefer-application-packages>
            <package-name>com.google</package-name>
        </prefer-application-packages>
    </container-descriptor>
    

    【讨论】:

    • 这只是救了我...谢谢... Oracle 真的...有点东西... -_-
    【解决方案4】:

    1) 从http://code.google.com/p/guava-libraries/下载guava-XX.X.X.jar 2)在Eclipse中右键单击项目选择构建路径并添加这个jar

    【讨论】:

      【解决方案5】:

      Using Guava bundled with GWT 工作。

      我从这里的 code.google.com/p/guava-libraries 将两个 Guava Jar 文件(版本 13)添加到我的 war/WEB-INF/lib 并将 guava-13.0.1.jar 添加到我的构建路径(右单击并添加到构建路径)

      【讨论】:

        猜你喜欢
        • 2018-12-14
        • 2017-10-02
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-01
        • 1970-01-01
        • 2012-04-17
        相关资源
        最近更新 更多