2012-03-09 8 views
5

estoy recibiendo un error al intentar crear la lista enlazada que dice:"LinkedList no es genérica" ​​error de 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)

Alguien sabe cómo solucionar este error? Este es el programa:

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

¿Qué está tratando de hacer? La clase LinkedList que está creando es una biblioteca de clases construida en Java en Colecciones. Cambia tu nombre de clase. –

Respuesta

15

Cambio

new LinkedList<String>() 

a

new java.util.LinkedList<String>() 

El origen del problema es que LinkedList se refiere a la clase que contiene el código class LinkedList , no java.util.LinkedList.

Los nombres de clase no calificados como LinkedList (a diferencia de los "nombres totalmente calificados" como java.util.LinkedList) se resuelven buscando una coincidencia en un orden determinado. Aproximadamente

  1. Busque una clase contenedora.
  2. Busque una importación sin comodín.
  3. Busque una clase en el mismo paquete.
  4. Busque una importación de comodines.

La sección "6.5 Determining the Meaning of a Name" de la especificación de lenguaje Java se explica con más detalle.

+0

Lo tengo trabajando. ¡Gracias! – Brett

+1

Apostaría mucho que estabas usando Eclipse ... Eclipse adora referirse a las bibliotecas más extrañas. – rewolf

2

Usted ha situado su método main en una clase llamada LinkedList, que tiene prioridad sobre la incorporada en LinkedList clase en el algoritmo de resolución de nombres del compilador. En otras palabras, como su método main está dentro de una clase llamada LinkedList, el compilador toma el nombre LinkedList para significar su claseLinkedList en lugar de java.util.LinkedList. Hay dos soluciones fáciles:

  1. cambiar el nombre de la clase
  2. En lugar de escribir

    listado = new LinkedList();

    escribir

    listado = new java.util.LinkedList();

Recomiendo encarecidamente la primera opción. Dado que su clase LinkedList no representa realmente la estructura de datos de la lista vinculada, el nombre de su clase es confuso para alguien que lee el código. Tal vez llame a su clase LinkedListTest lugar es decir, el archivo podría ser

import java.util.*; 

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

usted designó a su propia clase LinkedList, por lo que es tomar precedencia sobre el java.util.LinkedList.

Cambie el nombre de la clase a otra cosa o haga new java.util.LinkedList<String>() para que sea explícito cuál desea.

3
public class LinkedList { 

Su clase no se define como genéricos. Aunque creo que estás tratando de usar LinkedList de Java, entonces debes cambiar el nombre de tu clase.

3

Su clase también se llama LinkedList por lo que entra en conflicto. Si quiere arreglarlo, use esta línea. Mejor aún, solo tiene un nombre diferente para su clase ...

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