为什么int作为Object传递?

时间:2013-01-04 00:36:21

标签: java object arraylist java-7

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

为什么这是作为对象传递的?

3 个答案:

答案 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]);