никакая такая ошибка метода: ImmutableList.copyOf ()

Я использую Guava-05-snapshot с JDK 1.6 Sun аварийные завершения кода, выполняющие этот отрывок:

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

31
задан Pascal Thivent 27 June 2010 в 04:13
поделиться

2 ответа

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

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

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

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

45
ответ дан 27 November 2019 в 22:23
поделиться

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

ImmutableList<String> sorted = Ordering.natural()
    .immutableSortedCopy(Password.badWords);
3
ответ дан 27 November 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: