Ошибка «LinkedList не является общей» Java - PullRequest
6 голосов
/ 09 марта 2012

Я получаю сообщение об ошибке при попытке создать связанный список, который говорит:

Исключение в потоке "main" java.lang.Error: Неразрешенная проблема компиляции:
Тип LinkedList не является универсальным; не может быть параметризовано аргументами
в LinkedList.main (LinkedList.java:7)

Кто-нибудь знает, как исправить эту ошибку? Вот программа:

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));
        }
    }
}

Ответы [ 5 ]

16 голосов
/ 09 марта 2012

Изменение

new LinkedList<String>()

до

new java.util.LinkedList<String>()

Источник проблемы заключается в том, что LinkedList относится к классу, содержащему код class LinkedList, а не java.util.LinkedList.

Неквалифицированные имена классов, такие как LinkedList (в отличие от «полностью определенных имен», таких как java.util.LinkedList), разрешаются путем поиска соответствия в определенном порядке. Грубо

  1. Ищите содержащий класс.
  2. Ищите импорт без подстановочных знаков.
  3. Ищите класс в той же упаковке.
  4. Ищите импорт по шаблону.

Раздел "6.5 Определение значения имени" спецификации языка Java объясняется более подробно.

4 голосов
/ 09 марта 2012

Ваш класс также называется LinkedList, поэтому он конфликтует.Если вы хотите исправить это, используйте эту строку.А еще лучше, просто выберите другое название для вашего класса ...

3 голосов
/ 09 марта 2012
public class LinkedList {

Ваш класс не определен как универсальный. Я думаю, что вы пытаетесь использовать Java LinkedList, поэтому вам следует переименовать ваш класс.

2 голосов
/ 09 марта 2012

Вы поместили свой метод main в класс с именем LinkedList, который имеет приоритет над встроенным классом LinkedList в алгоритме разрешения имен компилятора. Другими словами, поскольку ваш метод main находится внутри класса с именем LinkedList, компилятор использует имя LinkedList для обозначения вашего LinkedList класса вместо java.util.LinkedList. Есть два простых исправления:

  1. Переименуйте свой класс
  2. Вместо записи

    Список списка = новый LinkedList ();

    запись

    Список списка = новый java.util.LinkedList ();

Я настоятельно рекомендую первый вариант. Поскольку ваш LinkedList класс на самом деле не представляет структуру данных связанного списка, имя вашего класса вводит в заблуждение того, кто читает код. Возможно, вместо этого позвоните вашему классу LinkedListTest, т. Е. Ваш файл может быть

import java.util.*;

public class LinkedListTest {
    // Implementation of main and helper methods
}
1 голос
/ 09 марта 2012
public class LinkedList {

Вы назвали свой собственный класс LinkedList, поэтому он имеет приоритет над java.util.LinkedList.

Либо измените имя класса на другое, либо сделайте new java.util.LinkedList<String>(), чтобы указать, какой класс вам нужен.

...