33

私は、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 コレクション コードを使用して、何ヶ月も機能していました。

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

書き込み可能な配列の作成と並べ替えPassword.badWordsImmutableSet<String>完全に機能します。ImmutableListしかし、配列を失敗に変換しようとします。

4

5 に答える 5

46

Guavaは完全に互換性のあるGoogleコレクションのスーパーセットです。互換性のない方法で何も変更していません。(これは、最新のguava jarに対してGoogleコレクションテストスイート全体(広範囲)を実行することによってテストされます。)

google-collect-*。jarのコピーがまだクラスパスに入っていると思います。明示的に、または他のjarファイルに再パッケージせずに含まれているため。あなたはそれを見つけて削除する必要があります。

GoogleコレクションにはImmutableList.copyOf(Iterable)メソッドがあり、パブリックImmutableList.copyOf(Collection)メソッドはありませんでした。コレクションも反復可能であるため、これは問題ありません。Guavaでは、コレクションのオーバーロードを追加しました。これは完全に互換性があります。これは、コンパイルに使用されたすべてのソースが引き続き可能であり、以前にコンパイルされたソースはすべて、元のメソッドを参照するだけです。

Guavaに対してコンパイルした後、Googleコレクションに対して実行すると、問題が発生します。私はそれが起こっている可能性が高いと信じています。

于 2010-06-27T15:25:50.597 に答える
4

これは、Maven からの公式の (スナップショットではない) guava-r05 リリースを使用しても問題なく動作します。ちなみに、これは同じことを行うためのもう少し良い方法かもしれません:

ImmutableList<String> sorted = Ordering.natural()
    .immutableSortedCopy(Password.badWords);
于 2010-06-27T04:29:34.067 に答える
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>
于 2014-05-06T16:12:45.843 に答える
0

GWTにバンドルされたGuavaを使用するとうまくいきました。

ここcode.google.com/p/guava-librariesから両方のGuava Jarファイル(バージョン13)をwar/WEB-INF/libに追加し、guava-13.0.1.jarをビルドパスに追加しました(右クリックして追加パスを作成する)

于 2012-10-29T05:17:43.073 に答える