判断Java对象是否为数组

流程图

flowchart TD
    Start --> 判断类型
    判断类型 --> 对象类型
    判断类型 --> 数组类型
    数组类型 --> 判断维度
    判断维度 --> 一维数组
    判断维度 --> 多维数组
    一维数组 --> 结束
    多维数组 --> 结束
    对象类型 --> 结束
    结束 --> Done

步骤详解

1. 判断类型

首先,我们需要判断给定的对象是一个普通对象还是一个数组。我们可以通过instanceof操作符判断对象是否是数组类型。

if (object instanceof Object[]) {
    // 数组类型
} else {
    // 对象类型
}

2. 数组类型

如果给定的对象是一个数组,我们需要进一步判断它是一维数组还是多维数组。

if (object.getClass().isArray()) {
    // 判断维度
} else {
    // 对象类型
}

3. 判断维度

如果给定的对象是一个数组,我们需要判断它的维度。一维数组是最简单的情况,我们可以直接判断其类型即可。对于多维数组,我们可以通过递归的方式判断每一维的类型。

if (object.getClass().getComponentType().isArray()) {
    // 多维数组
} else {
    // 一维数组
}

4. 一维数组

对于一维数组,我们可以直接通过getClass().getComponentType()获取其元素类型。

Class<?> componentType = object.getClass().getComponentType();

5. 多维数组

对于多维数组,我们可以通过递归的方式判断每一维的类型。首先,我们需要获取数组的维度。

int dimensions = getArrayDimensions(object);

然后,我们可以通过多次调用getClass().getComponentType()获取每一维的元素类型。

Class<?> componentType = object.getClass();
for (int i = 0; i < dimensions; i++) {
    componentType = componentType.getComponentType();
}

6. 结束

最后,我们可以根据得到的元素类型进行相应的处理。

示例代码

public class Main {
    public static void main(String[] args) {
        Object obj1 = new Object();
        Object obj2 = new int[10];
        Object obj3 = new int[10][5];
        
        if (isArray(obj1)) {
            System.out.println("obj1 is an array");
        } else {
            System.out.println("obj1 is not an array");
        }
        
        if (isArray(obj2)) {
            System.out.println("obj2 is an array");
        } else {
            System.out.println("obj2 is not an array");
        }
        
        if (isArray(obj3)) {
            System.out.println("obj3 is an array");
        } else {
            System.out.println("obj3 is not an array");
        }
        
        Class<?> componentType = getComponentType(obj1);
        System.out.println("obj1 component type: " + componentType);
        
        componentType = getComponentType(obj2);
        System.out.println("obj2 component type: " + componentType);
        
        componentType = getComponentType(obj3);
        System.out.println("obj3 component type: " + componentType);
    }
    
    public static boolean isArray(Object object) {
        return object.getClass().isArray();
    }
    
    public static Class<?> getComponentType(Object object) {
        if (!isArray(object)) {
            return object.getClass();
        }
        
        Class<?> componentType = object.getClass();
        while (componentType.isArray()) {
            componentType = componentType.getComponentType();
        }
        
        return componentType;
    }
}

输出结果:

obj1 is not an array
obj2 is an array
obj3 is an array
obj1 component type: class java.lang.Object
obj2 component type: class [I
obj3 component type: class [[I

通过以上代码和解释,我们可以判断给定的Java对象是一个普通对象还是一个数组,并获取数组的元素类型。