如何检查对象是否是某种类型的数组

One*_*ree 8 java reflection field

我有一个对象Field field.

我想检查是否field是类型的对象Foo或数组:Foo[].

Psuedo代码:

if field.getType() is Foo || field.getType is Foo[]
Run Code Online (Sandbox Code Playgroud)

这可能吗?

我试过了

if (field.getType().isArray())
    // do something
Run Code Online (Sandbox Code Playgroud)

但这只允许我检查是否field是一个数组.

相反,这样做只会检查它是否是一个对象 Foo

if (Foo.class.isAssignableFrom(field.getType())
     // do something
Run Code Online (Sandbox Code Playgroud)

知道怎么做吗?

谢谢.

Cla*_*lke 19

下面是我用过的一些代码来处理Java中所有原始类型的数组.由于它们不扩展Object类,因此检查Object []的实例是不够的.

/* Check if the given object is an array. */
if (object.getClass().isArray()) {

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

    if (componentType.isPrimitive()) {

        if (boolean.class.isAssignableFrom(componentType)) {
            for (boolean anElement : (boolean[]) object) {
                /* ... */
            }
        }

        else if (byte.class.isAssignableFrom(componentType)) {
            /* ... */
        }

        else if (char.class.isAssignableFrom(componentType)) {
            /* ... */
        }

        else if (double.class.isAssignableFrom(componentType)) {
            /* ... */
        }

        else if (float.class.isAssignableFrom(componentType)) {
            /* ... */
        }

        else if (int.class.isAssignableFrom(componentType)) {
            /* ... */
        }

        else if (long.class.isAssignableFrom(componentType)) {
            /* ... */
        }

        else if (short.class.isAssignableFrom(componentType)) {
            /* ... */
        }

        /* No else. No other primitive types exist. */
    }

    else {
        /* Do something with Object[] here. */
    }
}
Run Code Online (Sandbox Code Playgroud)