Что такое ошибка «неоднозначного типа» в Java?

В следующем коде я получаю сообщение об ошибке от компилятора в последней строке, которая говорит: «Список типов неоднозначен» (в строке, которая пытается определить список cgxHist). Что я делаю не так?

import java.awt.*;
import javax.swing.*;
import java.util.*;

public class drawr extends JPanel{

    public static int animationSpeed=470;
    public static int diameter = 50;
    hBod allHBods[];
    List<String> cgxHist = new ArrayList<String>();

На самом деле я хотел, чтобы список содержал целые числа, но когда я пытаюсь «привести» список как таковой, заменив <String> на <int>, ошибка в этой строке становится «Синтаксическая ошибка в токене «int», размеры ожидаются после этого токена». Совет пожалуйста.


person user2671186    schedule 27.11.2013    source источник
comment
Вы не можете использовать <int>, так как дженерики не поддерживают примитивные типы. См., например, этот вопрос для получения дополнительной информации.   -  person Mac    schedule 28.11.2013
comment
см. это также дайте методу printlnchar неоднозначность"> stackoverflow.com/questions/36325277/   -  person Kannan Thangadurai    schedule 17.04.2016


Ответы (2)


Проблема в том, что класс List есть как в пакете java.awt, так и в пакете java.util, и поскольку вы импортируете все классы из этих пакетов, компилятор не знает, какой из них вы имеете в виду.

Таким образом, вы должны либо не использовать звездочку для импорта всех классов одновременно (просто импортировать те, которые вам действительно нужны), либо вместо List писать java.util.List<String> cgxHist = new ArrayList<String>();

person Blub    schedule 27.11.2013
comment
Большое спасибо. Я учусь, но это очень медленный процесс. - person user2671186; 28.11.2013
comment
Это отвечает только на половину вопроса. Другая проблема заключается в том, что примитивы нельзя использовать с дженериками — OP придется использовать <Integer> вместо <int>. - person Mac; 28.11.2013

java.awt.List

java.util.List

Оба они существуют. Вам нужно будет добавить пространство имен впереди, чтобы использовать его:

java.util.List<String> cgxHist = new ArrayList<String>();

Если вы этого не сделаете, он не знает, как интерпретировать List<T>: это awt или util? Следовательно: двусмысленно.

person Jeroen Vannevel    schedule 27.11.2013