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

Java实例化抽象类item报无法实例化错误、空指针异常如何修复?

问题根源

你遇到的报错由两个底层问题共同导致:

  • item类被abstract关键字修饰,属于抽象类,Java语法明确规定抽象类无法直接通过new关键字实例化对象
  • 你当前定义的item类仅声明了接收String和int参数的有参构造方法,没有无参构造方法,就算移除abstract修饰,直接调用new item()也会抛出构造方法不存在的错误
修复方案

你可以根据自身业务需求选择以下任意一种方案:

方案1:调整item类定义,直接支持实例化

如果你的业务场景不需要item作为抽象基类,直接修改item类的定义即可:

// 移除abstract修饰符
public class item{
    public int ID;
    public String name;
    // 补充无参构造方法,适配你原有实例化逻辑
    public item() {
    }
        
    public item(String name, int ID) {
        this.name = name;
        this.ID = ID;
    }
        
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
        
    public int getID() {
        return ID;
    }
        
    public void setID(int ID) {
        this.ID = ID;
    }
}

同时推荐你优化first方法的逻辑,直接调用有参构造创建对象,避免手动赋值属性带来的漏填风险:

public static item first(String info) {
    String array[] = info.split(", "); 
    return new item(array[1], Integer.parseInt(array[0]));
}

方案2:保留item为抽象类,通过子类实例化

如果你的业务逻辑要求item必须作为抽象基类存在,就新增一个普通子类继承item,实例化子类对象即可:

  1. 新增子类定义:
public class CommonItem extends item {
    public CommonItem(String name, int ID) {
        // 调用父类item的有参构造
        super(name, ID);
    }
}
  1. 修改first方法的实例化逻辑:
public static item first(String info) {
    String array[] = info.split(", "); 
    int id = Integer.parseInt(array[0]);
    String name = array[1];
    // 实例化子类,向上转型为item类型
    return new CommonItem(name, id);
}

内容的提问来源于stack exchange,提问作者mario segale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:30:01