2012-03-09 10 views
5

Ricevo un errore quando si cerca di creare l'elenco collegato che dice:"LinkedList non è generico" errore Java

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The type LinkedList is not generic; it cannot be parameterized with arguments <String>
at LinkedList.main(LinkedList.java:7)

Qualcuno sa come risolvere questo errore? Ecco il programma:

import java.util.*; 

public class LinkedList { 
    public static void main(String[] args) { 
     List<String> list = new LinkedList<String>(); 
     Scanner input = new Scanner(System.in); 

     System.out.print("How many elements do you want to add: "); 
     int num = input.nextInt(); 

     for(int i = 0; i < num; i++) { 
      System.out.print("Add Element: "); 
      String element = input.next(); 
      list.add(element); 
     } 
     System.out.println(); 

     System.out.println("LinkedList elements are: "); 
     for(int i = 0; i < list.size(); i++) { 
      System.out.println(list.get(i)); 
     } 
    } 
} 
+2

Che cosa stai cercando di fare? La classe LinkedList che stai creando è una libreria di classi built-in Java in Collections. Cambia il tuo nome di classe. –

risposta

15

Change

new LinkedList<String>() 

a

new java.util.LinkedList<String>() 

La fonte del problema è che LinkedList si riferisce alla classe che contiene il codice class LinkedList , non java.util.LinkedList.

I nomi di classe non qualificati come LinkedList (a differenza di "nomi completi" come java.util.LinkedList) vengono risolti cercando una corrispondenza in un determinato ordine. Circa

  1. Cercare una classe contenente.
  2. Cerca un'importazione non jolly.
  3. Cerca una classe nello stesso pacchetto.
  4. Cerca un'importazione jolly.

La sezione "6.5 Determining the Meaning of a Name" della specifica del linguaggio Java spiega in maggior dettaglio.

+0

Ha funzionato. Grazie! – Brett

+1

Scommetto che stavi usando Eclipse .... Eclipse adora fare riferimento alle librerie più strane. – rewolf

2

è stato inserito il metodo main in una classe chiamata LinkedList, che ha la precedenza sul built-in LinkedList classe nel algoritmo di risoluzione del nome del compilatore. In altre parole, poiché il metodo main si trova all'interno di una classe denominata LinkedList, il compilatore assume il nome LinkedList per indicare la classeLinkedList anziché java.util.LinkedList. Ci sono due semplici correzioni:

  1. rinominare la classe
  2. Invece di scrivere

    lista Lista = new LinkedList();

    scrivere

    lista Lista = new java.util.LinkedList();

Consiglio vivamente la prima opzione. Poiché la tua classe LinkedList non rappresenta in realtà la struttura dei dati dell'elenco collegato, il nome sulla classe confonde chi legge il codice. Forse chiamare la classe LinkedListTest invece vale a dire il file potrebbe essere

import java.util.*; 

public class LinkedListTest { 
    // Implementation of main and helper methods 
} 
1
public class LinkedList { 

È chiamato la propria classe LinkedList, quindi sta prendendo la precedenza sul java.util.LinkedList.

Cambiare il nome della classe in qualcos'altro o fare new java.util.LinkedList<String>() per rendere esplicito quale si desidera.

3
public class LinkedList { 

La classe non è definita generica. Penso che tu stia cercando di usare la LinkedList di Java, quindi dovresti rinominare la tua classe.

3

La classe viene anche chiamata LinkedList, quindi è in conflitto. Se si desidera risolvere il problema, utilizzare questa riga. Meglio ancora, basta avere un nome diverso per la tua classe ...

List<String> list = new java.util.LinkedList<String>();