Java Stack.peek()到对象

时间:2018-04-21 19:09:35

标签: java class stack peek

我正在尝试使用堆栈将对象放入堆栈中。我有一个Pixel类,它有一个简单的getX函数,返回构造函数中定义的变量。当我使用stack.peek()。getX();它说它无法找到.getX()的符号;

Stack stack = new Stack();
Pixel first = new Pixel(colorX,colorY);

stack.push(first);

int x = stack.peek().getX();

我使用偷看功能错了吗?或者我的Pixel类设置不正确?

public class Pixel {
private int x, y , count = 0;

Pixel(int x_in, int y_in)
{
    x = x_in; 
    y = y_in;
}

public int getX(){return x;}
public int getY(){return y;}

2 个答案:

答案 0 :(得分:1)

因为您使用的是原始Stack,而不是Stack<Pixel>,您会收到此错误。原始堆栈基本上等同于Stack<Object>,因此当您致电peek()时,它会返回Object而不是Pixel

即使运行时类型可能是Pixel,方法解析也会在编译时发生,Object没有getX()方法。

答案 1 :(得分:0)

您使用Stack stack = new Stack();定义了堆栈,但堆栈类的定义具有参数类型Stack。通过不声明类型,由于Java并不总是有泛型,你基本上写了Stack<?>,因此编译器不知道返回值将具有哪些方法。

如何解决?将您的堆栈声明为Stack<Pixel> stack = new Stack<>();