1. 程式人生 > >利用反射技術在泛型String集合中存入Integer元素

利用反射技術在泛型String集合中存入Integer元素

首先我們來了解一下什麼叫反射: JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。

需求:在不修改原始碼的情況下將泛型為 的Arraylist集合中存入Integer元素. 原理: 程式編譯後產生的.class檔案中是沒有泛型約束的,這種現象我們稱為泛型的擦除。我們可以通過反射技術,來完成向有泛型約束的集合中,新增任意型別的元素

程式碼演示如下:

package ArrayAdding;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class ArrayDemo {
	public static void main(String[] args) throws Exception {
		ArrayList<String> list = new ArrayList<String>();
		list.add("array");
		//獲得集合物件的Class類
		Class cl =list.getClass();
		//從集合Class類中獲取add()方法 引數為object
		Method method = cl.getMethod("add", Object.class);
		//方法喚醒並呼叫 傳入集合物件和需要儲存的元素
		method.invoke(list, 123);
		method.invoke(list, 456);
		method.invoke(list, 789);
		System.out.println(list);
	}
}

泛型擦除新增元素後我們列印集合 效果如下: 在這裡插入圖片描述

擦出泛型後的集合可以使用增強for迴圈遍歷,不過取出元素型別為object;當我們採用迭代器迴圈遍歷時,迭代器泛型任然為String,同樣能夠取出Integer型別元素,因為在集合內部是一個object陣列物件.