使用反射解包数组



我试图解包一个数组,我从反射对象字段获得。我将general字段的值设置为Object。如果它是一个数组,那么我想将我的通用对象转换为一个数组(不管它的类型是什么)并提取其内容

fields[i].setAccessible(true);
        String key = fields[i].getName();
        Object value = fields[i].get(obj);
        if (value.getClass().isArray()){
            unpackArray(value);
        }

在我的unpackArray方法中,我尝试将对象值转换为java.util。数组,java.reflect.Array和Array[]但每次都不让我。

是否有一种方法可以将我的对象转换为通用数组?

多谢山姆

所有数组的唯一父类是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;
}

遗憾的是,原始数组和对象数组没有一个共同的数组类作为祖先。所以解包的唯一选择是装箱原始数组。如果你在调用这个方法之前做了null检查和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");
}

测试:http://ideone.com/iHQKY

最新更新