我知道对于 java 中的每个原始类型,都有一个可以表示相同值的引用类型,加上 null。例如,int 和 java.lang.Integer。
我也明白,虽然所有数组(甚至 java.lang.Object[])都派生自 java.lang.Object,但只有非原始类型的数组可以转换为 java.lang.Object[]。
换句话说,我们可以这样做:
Class type = Integer.class;
Object[] o = (Object[])java.lang.reflect.Array.newInstance(type, 4);
但以下导致异常:
Class type = int.class;
Object[] o = (Object[])java.lang.reflect.Array.newInstance(type, 4);
所以在那种特殊情况下,我们可以这样做:
Class type = int.class;
Object o = java.lang.reflect.Array.newInstance(type, 4);
...这似乎很好,直到有人想知道如何将元素添加到表示无法转换为 Object[] 的数组的 Object 中。
解决这个问题的唯一方法是检查数组元素的类型并适当地转换 Object 吗?
IE:
if (type == int.class)
((int[])o)[0] = getFirstElement();
else if (type == short.class)
((short[])o[0] = getFirstElement();