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

编写返回不同类型对象数组的Java方法频繁报错,求助排查

问题定位与修复方案

核心错误点

  • 数组下标越界:Java数组索引从0开始计数,你初始化的Object[] arr = new Object[4]合法索引范围是0~3,代码中使用arr[4]赋值会直接抛出ArrayIndexOutOfBoundsException
  • 空间浪费:你从索引1开始赋值,会导致arr[0]为null,占用了数组空间却没有使用

其他可能的报错原因

  • 未正确导入Computer、Notebook、Tablet三个类,会抛出cannot find symbol错误
  • 三个类的构造方法参数列表(参数数量、类型、顺序)和你实例化时传入的参数不匹配,也会触发编译错误

修正后的代码

public static Object[] createArray( )  {
  Computer c1 = new Computer("ASUS", "Intel", 8, 50, 2.4);
  Notebook n1 = new Notebook("Google", "Xeon", 20, 4, 4.5);
  Tablet t1 = new Tablet("APPLE", "AMD", 4, 25, 2.0, 11, 8, "IOS10");
  Computer c2 = new Computer("Dell", "Intel", 8, 23, 2.4);

  // 直接用初始化语法赋值,避免手动写下标出错
  Object[] arr = new Object[]{c1, n1, t1, c2};
  
  return arr;
}

额外优化建议

如果Notebook、Tablet都是Computer的子类,你完全可以把返回值类型改成Computer[],不需要用顶层Object数组,后续取值不需要强制类型转换,更安全:

public static Computer[] createArray( )  {
  Computer c1 = new Computer("ASUS", "Intel", 8, 50, 2.4);
  Computer n1 = new Notebook("Google", "Xeon", 20, 4, 4.5);
  Computer t1 = new Tablet("APPLE", "AMD", 4, 25, 2.0, 11, 8, "IOS10");
  Computer c2 = new Computer("Dell", "Intel", 8, 23, 2.4);

  return new Computer[]{c1, n1, t1, c2};
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:15:04