2010-06-27 8 views
29

sto usando Guava-05-snapshot, con Sun JDK 1.6 Il codice fa esplodere l'esecuzione di questo frammento:tale errore di metodo: ImmutableList.copyOf()

List<String> badpasswords = Lists.newArrayList(Password.badWords); 
Collections.sort(badpasswords); 
ImmutableList<String> tmp = ImmutableList.copyOf(badpasswords); 

particolare sul ImmutableList.copyOf () chiamata. Questo codice ha funzionato per mesi, utilizzando il vecchio codice di Google-Collections.

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

Il Password.badWords è un ImmutableSet<String> e la creazione della matrice scrivibile e il lavoro ordinamento perfettamente. Ma i tentativi di convertire la matrice in un ImmutableList falliscono.

+0

Lo stesso problema è stato risolto nella domanda successiva: http://stackoverflow.com/questions/3126276/splitter-blows-up-on-simple-pattern/3126420#3126420 – BalusC

+2

Probabilmente dovresti cambiare/accettare le risposte che sono utili, a proposito. – ColinD

risposta

41

Guava è un superset pienamente compatibile di Google Collezioni - non abbiamo cambiato nulla in modo non compatibile. (. Questo è testato eseguendo l'intera suite di test di Google Collezioni (che è vasta) contro la lastest vaso guava)

Credo che tu abbia una copia di google-raccoglie -. * Barattolo di stoffa ancora la sua strada nella tua classpath. O esplicitamente, o perché qualche altro barattolo l'ha incluso senza riconfezionarlo. Devi solo trovarlo e rimuoverlo.

Nelle raccolte Google, c'era un metodo ImmutableList.copyOf(Iterable) e non c'era un metodo pubblico ImmutableList.copyOf(Collection). Che va bene, perché anche una collezione è iterabile. In Guava, abbiamo aggiunto il sovraccarico della collezione. Questo è completamente compatibile, dato che tutta la fonte che è stata compilata può ancora, e qualsiasi fonte precedentemente compilata farà semplicemente riferimento al metodo originale.

Il problema si presenta se si compila contro Guava ma poi si esegue contro Google Collections. Credo che sia probabile ciò che sta accadendo.

+2

Il problema era un effetto collaterale di Netbeans che teneva troppe cose in cache. Un "clean and build" non ha fatto nulla per sistemare le cose. Ho fatto una pulizia completa e costruito in ogni vaso del progetto. La soluzione era uscire da Netbeans, andare a ~/netbeans/6.7/var/cache e fare un rm -rf * – fishtoprecords

+1

"Guava è un superset completamente compatibile di Google Collections" - Apparentemente non più? http://code.google.com/p/gdata-java-client/issues/detail?id=344#c2 –

+0

Sì, alcune cose hanno effettivamente colpito il loro punto di fine della vita "deprecato per 18 mesi", è vero. –

3

Questo funziona anche per me utilizzando la versione guava-r05 ufficiale (non istantanea) di Maven. Per inciso, questo potrebbe essere il modo un po 'più bello di fare la stessa cosa:

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

Mi piace quella versione. Grazie – fishtoprecords

0

Using Guava bundled with GWT lavorato.

Ho aggiunto entrambi i file Guava Jar (versione 13) da qui code.google.com/p/guava-libraries al mio war/WEB-INF/lib e aggiunto guava-13.0.1.jar al mio percorso di build (fare clic destro & metti in costruire il percorso)

1

Se l'errore si verifica durante la distribuzione un'applicazione web a WebLogic 12c (ma il file JAV guava è in WEB-INF/lib), la seguente configurazione in weblogic.xml aiuterà a risolverlo:

Problemi correlati