You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:38:56