Java类对象创建及泛型栈元素推入报错问题求助
解决泛型栈推入元素的问题
咱们先把问题的核心点拎出来:你定义的sPen是Stacks<Pen>类型的泛型栈,这意味着它的push方法只能接收Pen类型的对象,但你调用sPen.push(pen.getName())时,传入的是getName()返回的Object类型值,类型完全不匹配,编译器自然会报错。
正确的推入方式
直接把你创建好的Pen、Book、Eraser对象本身推入对应泛型栈就可以了,不需要调用getName()方法:
public class TestClass { Stacks<Pen> sPen = new Stacks<Pen>(); Stacks<Book> sBook = new Stacks<Book>(); Stacks<Eraser> sEraser = new Stacks<Eraser>(); Pen pen = new Pen(); Book book = new Book(); Eraser eraser = new Eraser(); // 测试推入元素的方法 public void testPushElements() { sPen.push(pen); // 直接传入Pen对象 sBook.push(book); // 直接传入Book对象 sEraser.push(eraser); // 直接传入Eraser对象 } }
为什么之前的代码会报错?
当你把泛型StackInterface<T>的T指定为Pen时,Stacks<Pen>里的push方法签名实际变成了public void push(Pen newEntry)——它只接受Pen类型的参数。而pen.getName()返回的是Object类型,和Pen类型并不兼容,所以编译器会抛出类型不匹配的错误。
额外小建议
如果你后续需要获取栈中元素的属性,比如Pen的name,可以在弹出或查看栈顶元素时再调用getName():
// 弹出栈顶的Pen对象并获取它的name Pen topPen = sPen.pop(); System.out.println(topPen.getName());
内容的提问来源于stack exchange,提问作者Umut
相关产品推荐
相关产品推荐

