import java.util.ArrayList;
class Stack {
private ArrayList stack;
private int pos;
Stack() {
stack = new ArrayList();
pos = -1;
}
int pop() {
if(pos < 0) {
System.out.println("Stack underflow.");
return 0;
}
int out = stack.get(pos);
stack.remove(pos);
pos--;
return out;
}
}
我正在尝试编写一个基本的可变长度堆栈,这是我的代码片段。当我运行它时,我收到一个错误:
Main.java:16: error: incompatible types
int out = stack.get(pos);
^
required: int
found: Object
为什么这是作为对象传递的?
答案 0 :(得分:3)
目前,您没有定义名为ArrayList
的{{1}}中保存的通用类型,因此您将从stack
获得原始Object
返回类型:
您需要替换
ArrayList.get
带
ArrayList stack;
和类似的
ArrayList<Integer> stack;
带
stack = new ArrayList();
另请参阅使用stack = new ArrayList<Integer>(); // new ArrayList<>(); for Java 7
答案 1 :(得分:1)
stack
未被告知其所持有的变量类型,因此它会转换为通用Object
。
ArrayList stack;
应该是
ArrayList<Integer> stack;
答案 2 :(得分:1)
stack.get(int)
方法返回一个对象。这里的int只是索引。如果您希望在索引int
获取堆栈的值并返回Integer
,则需要执行此操作:
Integer x = stack.get([int index position]);