Java中Stack.peek()获取对象调用getX()报错:无法找到符号
问题分析与解决方案
这问题其实是原始类型集合的类型擦除导致的,跟peek()方法本身没啥关系,咱们一步步拆解清楚:
1. 核心原因:未使用泛型的Stack导致类型丢失
你现在声明的是原始类型的Stack:
Stack stack = new Stack();
这种情况下,栈里所有元素都会被编译器当作Object类型处理。peek()方法返回的是Object实例,而Object类根本没有getX()方法,所以编译器会直接报错“找不到符号”。
解决办法:用泛型指定栈的元素类型,把声明改成:
Stack<Pixel> stack = new Stack<>(); // Java 7及以上支持菱形语法
这样peek()就会直接返回Pixel类型,调用getX()就完全没问题了。
2. 次要检查点:确认Pixel类的getX()方法正确实现
你给出的Pixel类片段里只定义了私有成员变量x,但没看到getX()的具体实现。如果这个方法没写、方法名拼错(比如写成getx())或者访问权限不对(比如用了private修饰),也会导致相同的报错。
正确的getX()方法应该是这样的:
public class Pixel { private int x, y, count = 0; // 别忘了你的构造方法 public Pixel(int x, int y) { this.x = x; this.y = y; } // 正确的getX实现 public int getX() { return this.x; } }
总结
先把Stack改成泛型版本,再确认Pixel类的getX()方法正确实现,这两个步骤就能解决你遇到的问题啦。
内容的提问来源于stack exchange,提问作者Drew Fowler
相关产品推荐
相关产品推荐

