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,实例化子类对象即可:
- 新增子类定义:
public class CommonItem extends item { public CommonItem(String name, int ID) { // 调用父类item的有参构造 super(name, ID); } }
- 修改
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
相关产品推荐
相关产品推荐

