Java获取数组组件类型及Array API简单示例
最近写一个转换工具,用到了获取数组组件类型的API以及Array的API,这里记录一笔。
一、关键API
Class<?>
Class.getComponentType();// 获取组件类型
Array
Array.newInstance(Class<?> componentType, int length);// 创建一个数组实例
二、代码示例
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.Arrays;
public class ArrayTest {
public static void main(String[] args) throws Exception {
String[] arrayStr = new String[0];
/**
* 获取数组变量的组件类型
*/
System.out.println(getComponentType(arrayStr.getClass()));// class java.lang.String
/**
* 获取数组属性的组件类型
*/
// 获取array属性对象
Field arrayField = Entity.class.getDeclaredField("array");
Class<?> componentType = getComponentType(arrayField.getType());
System.out.println(componentType);// int
/**
* 根据获取到的组件类型,创建一个array对象并赋值
*/
// 创建一个长度等于2的数组
Object array = Array.newInstance(componentType, 2);
// 赋值
Array.set(array, 0, 1);
Array.set(array, 1, 2);
System.out.println(Array.get(array, 1));// 1
/**
* 创建一个Entity对象,把上面通过Array.newInstance创建的数组对象填充到array属性上
*/
Entity e = new Entity();
arrayField.setAccessible(true);
arrayField.set(e, array);
System.out.println(e);// Entity [array=[1, 2]]
}
public static Class<?> getComponentType(Class<?> arrayClass) {
return arrayClass.getComponentType();
}
}
class Entity {
private Integer[] array;
public Integer[] getArray() {
return array;
}
public void setArray(Integer[] array) {
this.array = array;
}
@Override
public String toString() {
return "Entity [array=" + Arrays.toString(array) + "]";
}
}