2010-06-27 2 views
29

Я использую Guava-05-снимок с Солнцем JDK 1.6 кодом не взрывает выполнения этого фрагмента кода:нет такой ошибки метода: ImmutableList.copyOf()

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.badWords является ImmutableSet<String> и создание пишущего массива и сортировки работают отлично. Но попытки преобразования массива в ImmutableList терпят неудачу.

+0

На эту же проблему ответили в следующем вопросе: http://stackoverflow.com/questions/3126276/splitter-blows-up-on-simple-pattern/3126420#3126420 – BalusC

+2

Вам следует, вероятно, перенести/принять ответы, которые полезны, кстати. – ColinD

ответ

41

гуавы является полностью совместимым подмножеством коллекций Google - мы ничего не изменили в несовместимой образом. (. Это проверяется путем запуска всей Google Коллекция тестов (который обширен) против Lastest гуавы баночки)

Я считаю, что у вас есть копия Google-собирать. - * баночка еще задатков своего пути в CLASSPATH. Либо явно, либо потому, что какая-то другая банка включала его, не переупаковывая его. Вам просто нужно найти его и удалить.

В Google Collections был метод ImmutableList.copyOf(Iterable), и не было никакого общедоступного метода ImmutableList.copyOf(Collection). Это хорошо, потому что коллекция также является итерируемой. В Guava мы добавили перегрузку коллекции. Это полностью совместимо, поскольку все источники, которые были использованы для компиляции, могут, и любой ранее скомпилированный ранее источник просто будет ссылаться на исходный метод.

Проблема возникает, если вы компилируете Guava, а затем запускаете коллекцию Google. Я считаю, что это, скорее всего, происходит.

+2

Проблема была побочным эффектом Netbeans, хранящим слишком много вещей в кешках. «Чистое и строение» ничего не помогло исправить. Я сделал полную очистку и строил в каждую банку в проекте. Решением было выйти из Netbeans, перейти к ~/netbeans/6.7/var/cache и do rm -rf * – fishtoprecords

+1

«Guava - полностью совместимое дополнение Google Collections». По-видимому, больше нет? http://code.google.com/p/gdata-java-client/issues/detail?id=344#c2 –

+0

Да, некоторые вещи действительно поразили их «устаревшие на 18 месяцев» точки конца жизни, это правда. –

3

Этот также отлично подходит для меня, используя официальный выпуск (без моментального снимка) guava-r05 от Maven. Кстати, это может быть немного лучше способ сделать то же самое:

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

Мне нравится эта версия. Спасибо – fishtoprecords

0

Using Guava bundled with GWT работал.

Я добавил файлы Guava Jar (версия 13) здесь code.google.com/p/guava-libraries в мою войну/WEB-INF/lib и добавил guava-13.0.1.jar в мой путь сборки (щелкните правой кнопкой мыши & надстройку построить путь)

1

Если ошибка возникает при развертывании веб-приложение для WebLogic 12c (но JAR guava находится в WEB-INF/lib), следующая конфигурация в weblogic.xml поможет решить эту проблему:

<container-descriptor> 
    <prefer-application-packages> 
     <package-name>com.google</package-name> 
    </prefer-application-packages> 
</container-descriptor> 
Смежные вопросы