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