整理的反射相关的文章:
(1)、通俗理解反射(知乎):学习java应该如何理解反射?
(2)、关于反射比较深入的博文地址:深入解析Java反射(1) - 基础
贴出我反射调用代码:(craw,dept 就是两个属性包含Id的类)
CrawlingTagsThumbnail craw = new CrawlingTagsThumbnail();
craw.setId(1L);
Dept dept=new Dept();
dept.setId(222);
//调用下面的invoke方法
invoke(CrawlingTagsThumbnail.class,craw);
invoke(Dept.class,dept);
private void invoke(Class<?> clazz,Object o) throws Exception{ ////创建clazz的实例
//Object target = clazz.newInstance();
////这里可以把传入参数赋值到新的实例中(如果有需要)
// BeanUtils.copyProperties(o,target); //获取clazz类的getId方法
Method method = clazz.getMethod("getId");
//调用method对应的方法 => add(1,4)
Object result = method.invoke(o);
System.out.println(result);
}
反射调用相关扩展方法
获取某个Class对象的方法集合,主要有以下几个方法:
getDeclaredMethods
方法返回类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
public Method[] getDeclaredMethods() throws SecurityException
getMethods
方法返回某个类的所有公用(public)方法,包括其继承类的公用方法。
public Method[] getMethods() throws SecurityException
getMethod
方法返回一个特定的方法,其中第一个参数为方法名称,后面的参数为方法的参数对应Class的对象。
· public Method getMethod(String name, Class<?>... parameterTypes)
m.setAccessible(true);//解除私有限定
Class<?> c = CrawlingTagsThumbnail.class;
//创建对象
Object object = c.newInstance();
Method[] methods = c.getMethods();
Method[] declaredMethods = c.getDeclaredMethods();
//获取methodClass类的特定方法 比如要调用set方法, ("setPicThumbnailId",Long.class);
Method method = c.getMethod("getPicThumbnailId");
//getMethods()方法获取的所有方法
System.out.println("getMethods获取的方法:");
for(Method m:methods)
System.out.println(m);
//getDeclaredMethods()方法获取的所有方法
System.out.println("getDeclaredMethods获取的方法:");
for(Method m:declaredMethods)
System.out.println(m); //1.获取Class对象
Class stuClass = Class.forName("fanshe.method.Student");
//2.获取所有公有方法
System.out.println("***************获取所有的”公有“方法*******************");
stuClass.getMethods();
Method[] methodArray = stuClass.getMethods();
for(Method m : methodArray){
System.out.println(m);
}
System.out.println("***************获取所有的方法,包括私有的*******************");
methodArray = stuClass.getDeclaredMethods();
for(Method m : methodArray){
System.out.println(m);
}
System.out.println("***************获取公有的show1()方法*******************");
Method m = stuClass.getMethod("show1", String.class);
System.out.println(m);
//实例化一个Student对象
Object obj = stuClass.getConstructor().newInstance();
m.invoke(obj, "刘德华");
System.out.println("***************获取私有的show4()方法******************");
m = stuClass.getDeclaredMethod("show4", int.class);
System.out.println(m);
m.setAccessible(true);//解除私有限定
Object result = m.invoke(obj, 20);//需要两个参数,一个是要调用的对象(获取有反射),一个是实参
System.out.println("返回值:" + result)