Кастинг (не) требуется - PullRequest
0 голосов
/ 10 мая 2018

Я написал метод, который возвращает ArrayList со значениями, содержащимися в моей очереди. Очередь ArrayList заполнена объектами Node, и у этого класса есть параметр values ​​ типа T, который представляет собой данные, которые мне нужно получить. Я сделал метод getValue, чтобы сделать это:

public T getValue() {
    return value;
  }

(класс относится к типу ). Метод в моем классе очереди такой:

public ArrayList getArray() {
    ArrayList < T > onlyValues = new ArrayList<>();
    for (int i = 0; i < queue.size(); i++) {
      T tmp = (T)((queue.get(i)).getValue());
      onlyValues.add(tmp);
    }
    return onlyValues;
  }

Если я выполняю это без приведения (T), я получаю эту ошибку: error: incompatible types: Object cannot be converted to T Зачем? Я знаю, что метод add принимает Object типа T, и мой метод в классе Node возвращает элемент T.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Если вы объявляете переменную queue как

private ArrayList <Node> queue;

и Node являются общими, тогда вы используете необработанные типы. Объявите переменную как:

private ArrayList <Node<T>> queue;

Тогда вам не нужно будет разыгрывать:

T tmp = queue.get(i).getValue();

Вам также не хватает параметра типа в типе возвращаемого метода;

public ArrayList<T> getArray() {

Обратите внимание, что было бы проще использовать расширенный цикл for:

for (Node<T> node : queue) {
  onlyValues.add(node.getValue());
}
0 голосов
/ 10 мая 2018

Существует разница между типом и объектом со свойством, имеющим общий тип внутри него.Ваш ArrayList должен иметь добавленные объекты.Чтобы исправить это, используйте вместо этого:

onlyValue.add(new Node<T>(tmp));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...