我将Sun的JDK 1.6与Guava-05-snapshot一起使用
执行此代码段的代码会爆炸:

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失败。

最佳答案

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

我相信您有一个google-collect-*。jar的副本仍在您的类路径中。要么是显式的,要么是因为其他一些jar包含了它,而没有重新包装它。您只需找到并删除它。

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

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

关于java - 没有这样的方法错误: ImmutableList. copyOf(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3126330/

10-10 20:07