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) + "]";
}
}