# 识别阵列类型

> 原文： [https://docs.oracle.com/javase/tutorial/reflect/special/arrayComponents.html](https://docs.oracle.com/javase/tutorial/reflect/special/arrayComponents.html)

可以通过调用 [`Class.isArray()`](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#isArray--) 来识别数组类型。要获得 [`Class`](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html) ，请使用此跟踪的[检索类对象](../class/classNew.html)部分中描述的方法之一。

[``ArrayFind`` ](example/ArrayFind.java)示例标识指定类中具有数组类型的字段，并报告每个字段的组件类型。

```
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import static java.lang.System.out;

public class ArrayFind {
    public static void main(String... args) {
	boolean found = false;
 	try {
	    Class<?> cls = Class.forName(args[0]);
	    Field[] flds = cls.getDeclaredFields();
	    for (Field f : flds) {
 		Class<?> c = f.getType();
		if (c.isArray()) {
		    found = true;
		    out.format("%s%n"
                               + "           Field: %s%n"
			       + "            Type: %s%n"
			       + "  Component Type: %s%n",
			       f, f.getName(), c, c.getComponentType());
		}
	    }
	    if (!found) {
		out.format("No array fields%n");
	    }

        // production code should handle this exception more gracefully
 	} catch (ClassNotFoundException x) {
	    x.printStackTrace();
	}
    }
}

```

在 [`Class.getName()`](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--) 中描述了`Class.get*Type()`的返回值的语法。类型名称开头的“`[`”字符数表示数组的维数（即嵌套深度）。

输出样本如下。用户输入以斜体显示。一个原始类型数组`byte`：

```
$java ArrayFind java.nio.ByteBuffer
final byte[] java.nio.ByteBuffer.hb
           Field: hb
            Type: class [B
  Component Type: byte

```

引用类型 [`StackTraceElement`](https://docs.oracle.com/javase/8/docs/api/java/lang/StackTraceElement.html) 的数组：

```
$ java ArrayFind java.lang.Throwable
private java.lang.StackTraceElement[] java.lang.Throwable.stackTrace
           Field: stackTrace
            Type: class [Ljava.lang.StackTraceElement;
  Component Type: class java.lang.StackTraceElement

```

`predefined`是参考类型 [`java.awt.Cursor`](https://docs.oracle.com/javase/8/docs/api/java/awt/Cursor.html) 的一维数组，`cursorProperties`是参考类型 [`String`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html) 的二维数组：

```
$ java ArrayFind java.awt.Cursor
protected static java.awt.Cursor[] java.awt.Cursor.predefined
           Field: predefined
            Type: class [Ljava.awt.Cursor;
  Component Type: class java.awt.Cursor
static final java.lang.String[][] java.awt.Cursor.cursorProperties
           Field: cursorProperties
            Type: class [[Ljava.lang.String;
  Component Type: class [Ljava.lang.String;

```