没有这样的方法错误:ImmutableList.copyOf()

时间:2010-06-27 03:48:59

标签: java guava

我正在使用Guava-05-snapshot和Sun的JDK 1.6 代码爆炸执行此代码段:

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<String>,可写数组和排序的创建完美无缺。但尝试将阵列转换为ImmutableList失败。

5 个答案:

答案 0 :(得分:45)

Guava是Google Collections的完全兼容超集 - 我们没有以不兼容的方式更改任何内容。 (这是通过对最新的番石榴罐运行整个Google Collections测试套件(扩展)来测试的。)

我相信你有一个google-collect的副本 - * .jar仍然会进入你的类路径。显式,或者因为其他jar包含它而不重新打包它。你只需要找到并删除它。

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

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

答案 1 :(得分:3)

使用Maven的官方(非快照)guava-r05版本,​​这个对我很好。顺便说一句,这可能是做同样事情的一种更好的方式:

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

答案 2 :(得分:2)

如果在将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>

答案 3 :(得分:1)

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

答案 4 :(得分:0)

Using Guava bundled with GWT工作。

我将两个Guava Jar文件(版本13)从此处添加到我的war / WEB-INF / lib并将guava-13.0.1.jar添加到我的构建路径(右侧)点击&amp;添加到构建路径)