整理的反射相關的文章: (1)、通俗理解反射(知乎):學習java應該如何理解反射? (2)、關於反射比較深入的博文地址: 深入解析Java反射(1) - 基礎 貼出我反射調用代碼:(craw,dept 就是兩個屬性包含Id的類) 反射調用相關擴展方法 獲取某個Class對象的方法集合,主要有以下幾 ...
整理的反射相關的文章:
(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
方法返回類或介面聲明的所有方法,包括公共、保護、預設(包)訪問和私有方法,但不包括繼承的方法。
getMethods
方法返回某個類的所有公用(public)方法,包括其繼承類的公用方法。
getMethod
方法返回一個特定的方法,其中第一個參數為方法名稱,後面的參數為方法的參數對應Class的對象。
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)