Java 没有此类方法错误:ImmutableList.copyOf()

Java 没有此类方法错误:ImmutableList.copyOf(),java,guava,Java,Guava,我使用的是Guava-05-snapshot和Sun的JDK1.6 代码在执行此代码段时崩溃: List<String> badpasswords = Lists.newArrayList( Password.badWords); Collections.sort(badpasswords); ImmutableList<String> tmp = ImmutableList.copyOf(badpasswords); Password.badWords是一个Immut

我使用的是Guava-05-snapshot和Sun的JDK1.6 代码在执行此代码段时崩溃:

List<String> badpasswords = Lists.newArrayList( Password.badWords);
Collections.sort(badpasswords);
ImmutableList<String> tmp = ImmutableList.copyOf(badpasswords);
Password.badWords
是一个
ImmutableSet
,可写数组的创建和排序可以完美地工作。但是尝试将数组转换为
不可变列表
失败。

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

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

番石榴是谷歌收藏的一个完全兼容的超集——我们没有以不兼容的方式更改任何内容。(这是通过对最新的番石榴果酱运行整个Google Collections测试套件(非常广泛)来测试的。)

我相信你有一个GoogleCollect-*.jar的副本仍然在你的类路径中。要么是显式的,要么是因为其他jar包含了它而没有重新打包。你只需要找到它并移除它

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

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

奏效了

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

1)从
2) 在eclipse中,右键单击项目选择build path并添加此jar

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

谷歌

同样的问题在你接下来的问题中得到了回答:顺便说一句,你可能应该投票/接受有用的答案。这个问题是Netbeans在缓存中保留太多东西的副作用。一个“干净的建筑”并不能解决任何问题。我对项目中的每个罐子都做了彻底的清理和构建。解决方案是退出Netbeans,转到~/Netbeans/6.7/var/cache并执行rm-rf*“番石榴是谷歌收藏的完全兼容超集”——显然不再是了?是的,有些东西确实达到了“18个月不推荐使用”的寿命终点,这是真的。(这只是从2011年12月11.0版开始的。)我有一个类似的问题,但是com.google.common.collect.Iterables.getFirst。谢谢你的解决方案!这救了我。。。谢谢甲骨文真的是。。。有些事-_-
<container-descriptor>
    <prefer-application-packages>
        <package-name>com.google</package-name>
    </prefer-application-packages>
</container-descriptor>