java - 如何将从堆栈弹出的 ArrayList 的类型从对象更改为链表?

标签 java linked-list stack

我正在创建 ArrayList 并使用 push() 将它们存储在 Stack 中。 然而,当我弹出时,它给我一个错误 Object cannot be converted to List<Integer> .这是我的代码:

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

最佳答案

两件事:

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 时,编译器应该如何知道在这种情况下,因为你之前添加了一个列表,该值有一个更具体的类型?!

关于java - 如何将从堆栈弹出的 ArrayList 的类型从对象更改为链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56431133/

相关文章:

java - 获取 Swing 表中的数据库信息作为输出

c - 数组性能与 LinkedList 非常相似 - 给出了什么?

c# - 为什么这种递归方法在没有变量时会导致堆栈溢出错误?

java - 出现错误时更安静的 findbugs 控制台输出

java - 启动连接池时数据源出现NullPointerException

performance - 列出缓存行为

c++ - 递归反转链表的函数

c - C语言中,可以通过栈指针访问另一个函数中main函数的局部变量吗?

c - 难以理解连续的递归调用

java - 在 Struts 中使用 token