2009-11-26 20 views
19

Ho uno strano problema con Eclipse Galileo.
Ho impostato Java 1.6 come mio JRE. Su questa riga di codiceIl tipo Collection non è generico; non può essere parametrizzato con argomenti <? extends E>

List templates = new ArrayList(); 

vedo il seguente errore nel problematiche di Eclipse:

Il tipo Collection non è generica; non può essere parametrizzato con argomenti

Non ho alcun problema con la creazione di questo progetto con Ant.
Come posso risolvere il problema? Sembra che si tratti di un problema di Eclipse, ma a causa di questo errore, non riesco a compilare/pubblicare il mio progetto dall'IDE.

+1

il tuo errore è effettivamente a quel numero di riga? Su quale linea si verifica l'errore se fai qualcosa di simile: Elenca modelli; new ArrayList(); Non eseguire il compito sulla seconda riga, fammi sapere cosa succede. Sembra che tu abbia una classe Collection personalizzata da quell'errore che non è della firma: Collection ... che non ha senso. –

risposta

6

Per coloro, che arriva da Google: il problema era con biblioteca crittografica. Quando l'ho rimosso dal percorso di sviluppo di java, il progetto è compilato in modo soddisfacente.

38

Cosa importa List? (vedi questo thread from 2006)

java.awt.List o java.util.List?

Perché, come eclissi commenta giustamente, java.awt.List non è parametrizzato;)


di controllare anche la

  • Java Build path: non deve contenere un riferimento alla J2SE 1.4.2 librerie.
  • Source Compatibility: proprietà del progetto -> Impostazioni del compilatore Java, compatibilità di origine 5.0 o 6.0.

Oltre a questo, c'era un sacco di problema back in 2005 quando l'ultimo Eclipse 3.1 beta sosteneva J2SE5, ma questo è stato fissato da allora.

Prova a usare l'ultimo JDK6 nel tuo progetto.

+1

import java.util.List; – dbf

+1

buona cattura. Uno dei miei preferiti (quando non presta attenzione) - d'altro canto - si basa su formiche e non si lamenta di List ma di Collection. –

1

A volte è un singulto eclissi e eclipse -clean più l'aggiornamento di tutti i progetti aiuta.

Modifica

cosa cambia nulla quando si sostituisce il codice con:

java.util.List templates = new java.util.ArrayList(); 

o anche

java.util.List<Object> templates = new java.util.ArrayList<Object>(); 

?

+0

L'ho già provato. Inoltre ho provato a rimuovere la cartella .metadata e ricreare uno spazio di lavoro. – dbf

0

Alcune idee:

  • controllo biblioteca JRE utilizzato nel progetto (controllare il pacchetto di Explorer).
  • controllare i JRE installati nelle impostazioni di eclissi (come utilizzato dalla formica).
  • commenta la riga solo per verificare se è davvero la causa dell'errore.
  • ridigita l'intera riga da zero.
  • installa una nuova versione (pulita) di eclipse, in una nuova cartella (testing).
1

inserire la voce "JRE Sistema Bibliotecario di ..." in alto nel progetto, proprietà, percorso java costruzione, l'ordine e l'esportazione

2

Ehi, ho rimosso la libreria criptica e non ha funzionato. Ma poi ho messo JRE System Library in cima, e ha funzionato. Molto strano.

+2

Fare clic con il tasto destro del mouse su progetto -> Percorso build Java -> Ordina ed esporta sposta libreria di sistema JRE [jkd1.6] in alto. Ha funzionato per me –

+2

Ha funzionato per me a causa del seguente motivo: "import java.util.List;" Stavo importando una lista che precede i generici. Un modo per scoprirlo è Ctrl + "clic sinistro" in Eclipse; se apre List.class la cui definizione di interfaccia non è "Elenco di interfaccia pubblica estende la Raccolta ", quindi sta importando un Elenco che non conosce i generici. –

0

make java buildpath riferimento alla maggiore o uguale a Java 1.5

o si tenta di aggiungere il "importazione java.util.List" dichiarazione allora si può vedere che

eclissi sta dicendo che è in conflitto con qualche altro tipo di lista

per esempio, potrebbe essere in conflitto con com.lowagie.xx.xxx.List ecc cercare di evitare questi importazione

dichiarazioni

3

Hai nominato la tua lista di classe? cioè:

import java.util.*; 

public class List { // can't do this, name this something else. 

    public static void main(String[] args) { 
     List<Integer> l = new ArrayList<Integer>(); 

    } 

} 
1

uso "importazione java.util.List"

invece di importazione predefinito "import antlr.collections.List;"

e utilizzare il JRE5 o superiore per il supporto generico di raccolta API ....

1

ad esempio:

public class AClass<T extends Object> 
{ 
public HashMap<String, String> myMap; 
} 

se scrivo:

public class BClass 
{ 

private AClass aClass = new AClass(); 

public void test() 
{ 

aClass.get("test"); 
//return Object class 

} 

} 

ma se scrivo:

public class BClass 
{ 

private AClass<?,?> aClass = new AClass<?,?>(); 

public void test() 
{ 

aClass.get("test"); 
//return String class 

} 

} 
20

È tardi ma continuando a rispondere, potrebbe essere utile per gli altri che stanno ancora affrontando il problema. Stavo ottenendo esattamente lo stesso problema. La lista era corretta con util.List. La soluzione era ordinare le esportazioni delle librerie. Se si utilizza Maven o altre librerie:

In Project -> costruire il percorso -> Configura costruire il percorso -> Ordine & Esportazioni

Check 'JRE Sistema Biblioteche' dovrebbe essere al di sopra 'Maven Dipendenze'

Questo ha funzionato per me.

+0

Questo ha funzionato anche per me. Il problema era che Eclipse Jetty (server HTTP) stava introducendo un vaso Apache Felix chiamato osgi foundation che conteneva un java.util.List reimpacchettato! –

+0

OMG! Questo ha funzionato anche per me. Salvato molto tempo. Grazie. – Ahamed

0

cercare di rimuovere import antlr.collections.List; e cliccare Ctr + spazio da usare java.util

1

ho cambiato l'importazione

import javax.swing.text.html.HTMLDocument.Iterator; 

a

import java.util.Iterator; 

allora ha funzionato per me

Problemi correlati