数组 - 检查对象是否为数组

时间:2016-11-30 22:58:40

标签: java arrays

在我的代码中,我有以下功能:

private static Object formatArg(Object arg)
{
    Object formatterArg;
    if (arg instanceof Collection)
        formatterArg = getFormatter().format((Collection) arg, mFormatters);
    else if (arg instanceof Object[])
        formatterArg = getFormatter().format((Object[]) arg, mFormatters);
    else
        formatterArg = getFormatter().format(arg, mFormatters, false);

    return formatterArg;
}

问题在于arg instanceof Object[]。这样做的目的是我想处理int[]long[]和任何基元数组。

问题

是否有可能找出Object是一个数组,无论哪种类型并将其传递给另一个函数?这应该适用于基本类型的数组以及Objects的数组...我可以使用arg != null && arg.getClass().isArray()来检查它Object是一个数组,但是我不知道知道如何传递它(因为我不能仅仅将int[]投射到Object[] ......)。实现我想要的任何技巧?

修改

漂亮的解决方案会自动将int[]转换为Integer[],将long[]转换为Long[],依此类推。那些转换后的数组将与我的instanceof Object[]一起使用,但这意味着我必须手动检查这些原始类型,我可以这样做,但这很难看。有更好的想法吗?

2 个答案:

答案 0 :(得分:1)

快速锻炼以获取对象数组

public static void main(String[] args) {
    int[] arrInt = {23, 45, 67, 89};
    long[] arrLong = {23, 45, 67, 89};
    System.out.println(convertarrObj(arrInt));
}

static Object[] convertarrObj(Object arrObj){
    if(arrObj.getClass().isArray()) {
        Object[] objArray = new Object[Array.getLength(arrObj)];
        for(int i = 0; i < Array.getLength(arrObj) ; i++) {
            objArray[i] = Array.get(arrObj, i);
        }
        return objArray;
    }

    return null;
}

可以很容易地确保返回一个Integer或Long或任何其他类型的数组

static Object[] convertarrObj(Object arrObj){
    Object[] objArrayObjects = null;
    if(arrObj instanceof Collection)
        return null;
    else if(arrObj.getClass().isArray()) {
        Object firstElement = Array.get(arrObj, 0);
        if (firstElement instanceof Integer) {
            objArrayObjects = new Integer[Array.getLength(arrObj)];
        } else if(firstElement instanceof Long) {
            objArrayObjects = new Long[Array.getLength(arrObj)];
        }
        for(int i = 0; i < Array.getLength(arrObj) ; i++) {
            objArrayObjects[i] = Array.get(arrObj, i);
        }
    }

    return objArrayObjects;
}

这背后的逻辑是在原始数据类型和相应类之间自动包装Java。 Determine Type of Primitive data type

答案 1 :(得分:0)

是的,您可以使用:

arg.getClass().isArray()

以下是associated Javadoc - 您还可以找到帮助您确定数组的组件类型的方法,这些方法也可能对您的代码有用。