Java基礎之反射

反射是java提供的一個重要功能,能夠在運行時檢查類、接口、方法和變量等信息,無需知道類的名字,方法名等。還能夠在運行時實例化新對象,調用方法以及設置和獲取變量值。java

反射很是強大和有用,不少java框架中都有反射的影子,例如spring、mybatis等等,spring

JDBC利用反射將數據庫的表字段映射到java對象的getter/setter方法。數據庫

Jackson, GSON, Boon等類庫也是利用反射將JSON文件的屬性映射到java對的象getter/setter方法。mybatis

可見,只要使用java,反射就無處不在。框架

未完成 。。。對象

 程序執行時,利用反射在List集合動態插入其餘類型數據:blog

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class ReflectList {
	
	public static void main(String[] args) {
		
		List<String> array = new ArrayList<>();
		array.add("張三丰");
		array.add("張無忌");
		
		//獲取class類對象
		Class list = array.getClass();
		
		try {
			//獲取ArrayList集合的add方法
			Method add = list.getDeclaredMethod("add", Object.class);
			//執行add方法
			add.invoke(array, 100);
			System.out.println(array);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		/**
		 * 反射添加100後不可遍歷list集合,會報錯:
		 * Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
		 * at www.mxh.com.ReflectList.main(ReflectList.java:28)
		 * 
		 * 100類型不符合String
		 */
		for(int i=0; i<array.size(); i++) {
			System.out.println(array.get(i));
		}
		
	}

}

  

 推薦閱讀:Java反射使用總結 - alunbar的文章 - 知乎 https://zhuanlan.zhihu.com/p/80519709接口

相關文章
相關標籤/搜索