我正在尝试使用堆栈将对象放入堆栈中。我有一个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;}
答案 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<>();