invoke,就是經過函數名反射調用相應的函數。如下代碼簡單地介紹了java反射中invoke方法java
package org.curry.tool; import java.lang.reflect.Method; public class InvokeMethods { public static void main(String[] args) { Employee emp = new Employee(); Class cl = emp.getClass();//是Class,而不是class // getClass得到emp對象所屬的類型的對象,Class就是描述類的類 // Class是專門用來描述類的類,好比描述某個類有那些字段,方法,構造器等等! try { // getMethod方法第一個參數指定一個須要調用的方法名稱,這裏是Employee類的setAge方法, // 第二個參數是須要調用方法的參數類型列表,是參數類型!如無參數能夠指定null或者省略 // 該方法返回一個方法對象 //參數必須和方法中同樣,int和Integer,double和Double被視爲不一樣的類型 Method sAge = cl.getMethod("setAge", new Class[] { int.class }); Method gAge = cl.getMethod("getAge", null); Method pName = cl.getMethod("printName", new Class[] { String.class }); Object[] args1 = { new Integer(25) }; // invoke方法中,第二個參數爲參數列表,該參數列表是一個object[]數組 // emp爲隱式參數該方法不是靜態方法必須指定 sAge.invoke(emp, args1);//經過setter方法賦值 Integer AGE = (Integer) gAge.invoke(emp, null);//經過getter方法返回值 int age = AGE.intValue();//Integer轉換成int System.out.println("The Employee Age is: " + age); Object[] args3 = { new String("Jack") }; pName.invoke(emp, args3); } catch (Exception e) { e.printStackTrace(); } System.exit(0); } } class Employee { // 定義一個員工類 public Employee() { age = 0; name = null; } // 將要被調用的方法 public void setAge(int a) { age = a; } // 將要被調用的方法 public int getAge() { return age; } // 將要被調用的方法 public void printName(String n) { name = n; System.out.println("The Employee Name is: " + name); } private int age; private String name; }
項目代碼:數組
/** *利用keyName來對以search做爲查詢條件的結果集進行過濾 / public Map<Object, T> getMap(Search search,String keyName){ List<T> entities=this.getBaseDao().search(search, DaoParam.SEARCH_OPTION_NORMAL); Map<Object, T> map=new LinkedHashMap<Object, T>(); //經過參數keyName得到get方法名,好比getName,getAge String methodName="get"+keyName.substring(0,1).toUpperCase()+keyName.substring(1); for(T entity:entities){ Object key=null; try { //getter方法不須要參數 Method method=entity.getClass().getMethod(methodName); //反射調用方法 key=method.invoke(entity); if(key instanceof BasePojo){ //若是getter方法返回的是BasePojo類,那麼以該BasePojo的id做爲key key=((BasePojo<?>)key).getId(); } map.put(key, entity); } catch (Exception e) { logger.error(e,e); } } entities=null; return map; }