Java獲取數組組件類型及Array API簡單示例

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


發佈了26 篇原創文章 · 獲贊 15 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章