通过反射机制利用方法名动态调用方法

有些情况下需要通过方法名动态调用方法:

    Method method = XXXX.getClass().getMethod(methodName,new java.lang.Class[]{parameterTypesClass});   
    method.invoke(object,new Object[]{parameter});   
       
methodName是要调用的方法名字,parameterTypesClass是要调用方法的参数的类型的数组,且必须声明为Class[]类型的数组!(对于没有参数的方法,可以省去不写)   
object:当要调用的方法为static时,该参数为null,否则应该是所要载入的类的实例(即该方法所属的类的实例)   
parameter:是你要调用的方法参数(与parameterTypesClass中的类型声明对应)
 
如果方法有返回值,返回为Object类型,可以自行进行转换!
Object obj = method.invoke(object,new Object[]{parameter});  


例如:

for(BatchableAttr attr : attrs) {
   Method method;
   try {
         method = productListOutBean.getClass().getMethod(attr.getGetAttrMethodName());
         attr.setAttrValue((String)method.invoke(productListOutBean));
   } catch (SecurityException e) {
         e.printStackTrace();
   } catch (NoSuchMethodException e) {
         e.printStackTrace();
   } catch (IllegalArgumentException e) {
         e.printStackTrace();
   } catch (IllegalAccessException e) {
         e.printStackTrace();
   } catch (InvocationTargetException e) {
         e.printStackTrace();
   }
   this.attrs.add(attr);
}

其中productListOutBean为ProductListOutBean的一个实例
调用的方法没有参数,返回值为String

你可能感兴趣的:(反射机制)