Java Stack.peek() 对象

Java Stack.peek() to objects

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

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

stack.push(first);

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

我是不是用错了peek功能?还是我的 Pixel class 设置不正确?

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;}

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

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

因为您使用的是原始 Stack,而不是 Stack<Pixel>,所以您会收到此错误。原始堆栈本质上等同于 Stack<Object>,因此当您调用 peek() 时,它是 returns Object 而不是 Pixel

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