编写返回不同类型对象数组的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
相关产品推荐
相关产品推荐

