Java基础之反射

反射是java提供的一个重要功能,可以在运行时检查类、接口、方法和变量等信息,无需知道类的名字,方法名等。还可以在运行时实例化新对象,调用方法以及设置和获取变量值。

反射非常强大和有用,很多java框架中都有反射的影子,例如spring、mybatis等等,

JDBC利用反射将数据库的表字段映射到java对象的getter/setter方法。

Jackson, GSON, Boon等类库也是利用反射将JSON文件的属性映射到java对的象getter/setter方法。

可见,只要使用java,反射就无处不在。

未完成 。。。

 程序执行时,利用反射在List集合动态插入其他类型数据:

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

原文地址:https://www.cnblogs.com/mxh-java/p/11457079.html