Как изменить тип ArrayList выскочил из стека из объекта в связанный список? - PullRequest
2 голосов
/ 03 июня 2019

Я создаю ArrayLists и сохраняю их с помощью push () в стеке.однако, когда я выскакиваю, это дает мне ошибку, что Object cannot be converted to List<Integer>.Это мой код:

 List<Integer> myl=new ArrayList<Integer>();
 myl=myStack.pop();

1 Ответ

1 голос
/ 03 июня 2019

Две вещи:

List<Integer> myl = new ArrayList<Integer>(); 

можно упростить до:

List<Integer> items = new ArrayList<>(); 

Алмазный оператор позволяет избежать повторения информации о типе. Я также изменил его, чтобы использовать значащие имена. Не используйте сокращения, которые не имеют никакого смысла. Используйте то, что легко понимают ваши читатели.

И тогда вам просто нужен состав:

items = (List<Integer>) myStack.pop();

Конечно, это требует, чтобы у вас действительно был список сверху вашего стека!

В идеале, ваш стек сам может поддерживать дженерики, чтобы вы могли сказать что-то вроде:

MyStack<List<Integer>> myStack = new MyStack<>();

чтобы потом можно было просто пойти

items = myStack.pop();

без приведения!

Видите ли, когда в сигнатуре вашего метода указано this method returns Object, тогда как компилятор должен знать, что в этом случае, поскольку ранее вы добавили список, значение имеет более конкретный тип?!

...