使用反射解压数组

发布于 2024-12-14 23:54:15 字数 454 浏览 0 评论 0原文

我正在尝试解压从反映对象字段获得的数组。 我将常规字段的值设置为一个对象。如果它是一个数组,那么我想将我的通用对象转换为数组(无论其类型是什么)并提取其内容

fields[i].setAccessible(true);
        String key = fields[i].getName();
        Object value = fields[i].get(obj);

        if (value.getClass().isArray()){
            unpackArray(value);
        }

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

有没有办法可以将我的对象转换为通用数组?

非常感谢 山姆

I am trying to unpack an array I obtain from reflecting an objects fields.
I set the value of the general field to an Object. If it is an Array I then want to cast my general Object to an array (no matter what its type) and extract its content

fields[i].setAccessible(true);
        String key = fields[i].getName();
        Object value = fields[i].get(obj);

        if (value.getClass().isArray()){
            unpackArray(value);
        }

In my unpackArray method, I have tried casting the Object Value to java.util.Arrays, java.reflect.Array and Array[] but each time it is not letting me.

Is there a way I can cast my Object to a generic array?

Many Thanks
Sam

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月亮邮递员 2024-12-21 23:54:15

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

The only parent class of all arrays is Object.

To extract the values of an array as an Object[] you can use.

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;
}
誰認得朕 2024-12-21 23:54:15

不幸的是,原始数组和对象数组没有共同的数组类作为祖先。因此,解包的唯一选择是装箱原始数组。如果在调用此方法之前执行 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

Unfortunately primitive Arrays and Object Arrays do not have a common array class as ancestor. So the only option for unpacking is boxing primitive arrays. If you do null checks and isArray before calling this method you can remove some of the checks.

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");
}

Test: http://ideone.com/iHQKY

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文