文档

Java™ 教程
隐藏目录
识别数组类型
路径: 反射API
课程: 数组和枚举类型
部分: 数组

识别数组类型

数组类型可以通过调用Class.isArray()来识别。要获取一个Class,可以使用本教程中检索类对象一节中描述的方法之一。

示例ArrayFind会识别命名类中的数组类型字段,并报告每个字段的组件类型。

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"
                               + "           字段名: %s%n"
			       + "            类型: %s%n"
			       + "  组件类型: %s%n",
			       f, f.getName(), c, c.getComponentType());
		}
	    }
	    if (!found) {
		out.format("没有数组字段%n");
	    }

        // 实际代码应更优雅地处理此异常
 	} catch (ClassNotFoundException x) {
	    x.printStackTrace();
	}
    }
}

Class.get*Type()的返回值语法在Class.getName()中有描述。类型名称开头的'['字符的数量表示数组的维度(即嵌套的深度)。

以下是输出示例。用户输入以斜体表示。原始类型byte的数组:

$java ArrayFind java.nio.ByteBuffer
final byte[] java.nio.ByteBuffer.hb
           字段名: hb
            类型: class [B
  组件类型: byte

引用类型StackTraceElement的数组:

$ java ArrayFind java.lang.Throwable
private java.lang.StackTraceElement[] java.lang.Throwable.stackTrace
           字段名: stackTrace
            类型: class [Ljava.lang.StackTraceElement;
  组件类型: class java.lang.StackTraceElement

predefined是一维的引用类型java.awt.Cursor数组,而cursorProperties是二维的引用类型String数组:

$ java ArrayFind java.awt.Cursor
protected static java.awt.Cursor[] java.awt.Cursor.predefined
           字段名: predefined
            类型: class [Ljava.awt.Cursor;
  组件类型: class java.awt.Cursor
static final java.lang.String[][] java.awt.Cursor.cursorProperties
           字段名: cursorProperties
            类型: class [[Ljava.lang.String;
  组件类型: class [Ljava.lang.String;

上一页: 数组
下一页: 创建新数组