我正在尝试解压缩从反射对象字段获得的数组。 我将常规字段的值设置为Object。如果它是一个数组,那么我想将我的一般对象转换为一个数组(无论它的类型)并提取其内容
fields[i].setAccessible(true);
String key = fields[i].getName();
Object value = fields[i].get(obj);
if (value.getClass().isArray()){
unpackArray(value);
}
在我的unpackArray方法中,我尝试将Object Value转换为java.util.Arrays,java.reflect.Array和Array [],但每次都不允许我这样做。
有没有办法将我的Object转换为通用数组?
非常感谢 萨姆
答案 0 :(得分:11)
所有数组的唯一父类是Object。
要将数组的值提取为Object[]
,您可以使用。
public static Object[] unpack(Object array) {
Object[] array2 = new Object[Array.getLength(array)];
for(int i=0;i<array2.length;i++)
array2[i] = Array.get(array, i);
return array2;
}
答案 1 :(得分:2)
不幸的是,原始数组和对象数组没有共同的数组类作为祖先。所以解包的唯一选择是装箱原始数组。如果在调用此方法之前执行空检查和isArray,则可以删除一些检查。
public static Object[] unpack(final Object value)
{
if(value == null) return null;
if(value.getClass().isArray())
{
if(value instanceof Object[])
{
return (Object[])value;
}
else // box primitive arrays
{
final Object[] boxedArray = new Object[Array.getLength(value)];
for(int index=0;index<boxedArray.length;index++)
{
boxedArray[index] = Array.get(value, index); // automatic boxing
}
return boxedArray;
}
}
else throw new IllegalArgumentException("Not an array");
}