反射是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接口