Тип Collection не является универсальным; это не может быть параметризовано с аргументами <? расширяет E>

У меня странная проблема с Eclipse Galileo.
Я установил Java 1.6 в качестве JRE. На этой строке кода

List templates = new ArrayList ();

Я вижу следующую ошибку в списке проблем Eclipse:

Тип Collection не является универсальным; не может быть параметризовано аргументами

У меня нет проблем с созданием этого проекта с помощью Ant.
Как я могу это исправить? Похоже, это проблема Eclipse, но из-за этой ошибки я не могу скомпилировать / опубликовать свой проект из IDE.

13 ответов

Решение

Для тех, кто попадет туда из Google: проблема была с библиотекой cryptix. Когда я удалил его из пути сборки Java, проект успешно скомпилирован.

Какие List вы импортируете? (см. эту ветку с 2006 года)

java.awt.List или же java.util.List?

Потому что, как удачно комментирует затмение, java.awt.List не параметризован;)


Проверьте также


Помимо этого, было много проблем еще в 2005 году, когда последняя бета-версия Eclipse 3.1 поддерживала J2SE5, но с тех пор это было исправлено.

Попробуйте использовать последнюю версию JDK6 в своем проекте.

Уже поздно, но все еще отвечаю, может быть полезно для тех, кто все еще сталкивается с проблемой. Я получал точно такую ​​же проблему. Список был корректным с помощью util.List. Решение состояло в том, чтобы заказать экспорт библиотек. Если вы используете Maven или любые другие библиотеки:

В проекте -> Путь сборки -> Настройка пути сборки -> Порядок и экспорт

Проверьте, что 'Системные библиотеки JRE' должны быть выше 'Maven Dependencies'

Это сработало для меня.

Вы назвали свой список классов? то есть:

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

    }

}

Эй, я удалил загадочную библиотеку, и она не сработала. Но затем я поместил Системную библиотеку JRE на вершину, и это сработало. Очень странно.

Поместите запись "JRE System Library..." вверху в проекте, свойствах, пути сборки java, порядке и экспорте

Я изменил импорт

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

в

   import java.util.Iterator;

тогда у меня это сработало

Используйте "import java.util.List"

вместо импорта по умолчанию импорт "import antlr.collections.List;"

и использовать JRE5 или выше для общей поддержки API коллекции....

Иногда это сбой затмения и eclipse -clean плюс обновление всех проектов помогает.

редактировать

Изменяет ли это что-нибудь, когда вы заменяете свой код на:

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

или даже

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

?

Например:

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

если я напишу:

public class BClass
{

private AClass aClass = new AClass();

public void test()
{

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

}

}

но если я напишу:

public class BClass
{

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

public void test()
{

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

}

}

Попробуй удалить import antlr.collections.List; и нажмите Ctr+пробел, чтобы использовать java.util

Сделать ссылку на Java buildpath более или равной Java 1,5

или вы пытаетесь добавить оператор import java.util.List, тогда вы можете увидеть, что

Eclipse говорит, что он конфликтует с другим типом списка

например, это может конфликтовать с com.lowagie.xx.xxx.List и т. д., попробуйте избежать импорта

заявления

Некоторые идеи:

  • проверьте библиотеку JRE, используемую в вашем проекте (проверьте проводник пакетов).
  • проверьте установленные JRE в настройках eclipse (так же, как используется ant).
  • закомментируйте строку, чтобы проверить, действительно ли это является причиной ошибки.
  • перепечатайте всю строку с нуля.
  • установить новую (чистую) версию Eclipse в новую папку (тестирование).
Другие вопросы по тегам