反射调用方法:
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
/**
*
*反射基类
* @ClassName: Inject
* Copyright 2018 中国外汇交易中心 All Rights Reserved
* @Description: TODO
* @author liuhanlin
* @date 2019年4月18日 下午4:13:58
*
*/
public class Inject {
/**
*获取主机IP地址
* @Title: getAdress
* @Description: TODO
* @param @param ip
* @param @param hostName
* @param @return
* @return String
* @throws
*/
public static String getAdress(String ip, String hostName){
if(StringUtils.isNotEmpty(ip) && StringUtils.isNotEmpty(hostName)){
return "ip:" + ip + "hostName:" + hostName;
}
return null;
}
/**
*获取所有score之和
* @Title: getScoreAll
* @Description: TODO
* @param @param eng
* @param @param cn
* @param @param math
* @param @return
* @return List
* @throws
*/
private static List getScoreAll(Integer eng, Integer cn, Integer math){
List list = new ArrayList();
list.add(eng);
list.add(cn);
list.add(math);
if(list.size() >= 0){
return list;
}
return null;
}
}
public static void main(String[] args) {
Class cla = Inject.class;
try {
// Method method = cla.getMethod("getAdress", new Class[]{String.class, String.class});
// Object result = method.invoke(null, new Object[]{"192.168.120.102", "langhing"});
//Method method = cla.getMethod("getScoreAll", new Class[]{Integer.class, Integer.class, Integer.class});
Method declaredMethod = cla.getDeclaredMethod("getScoreAll", new Class[]{Integer.class, Integer.class, Integer.class});
//如果方法mul是私有的private方法,按照上面的方法去调用则会产生异常NoSuchMethodException,这时必须改变其访问属性
declaredMethod.setAccessible(true);//私有的方法通过发射可以修改其访问权限
//invoke 方法的第一个参数是被调用的对象,这里是静态方法故为null 若为静态则需要new一个对象【因为实例方法必须在一个对象上执行】,第二个参数为给将被调用的方法传入的参数
Object result = declaredMethod.invoke(null, new Object[]{85, 96, 88});
System.err.println("【静态方法反射调用】" + result);
} catch (Exception e) {
e.printStackTrace();
}
}
--------------------------------------------------------------------------------反射之第二阶段:packagecom.cfets.ts.u.fxdeal.util;public classReflectUtils {public voidgetSelectAll(String name1, String name2){
System.out.println(name1+":"+name2);
}public voidgetAll(){
System.out.println("无参数");
}public int getTotal(int m, intn){
System.out.println(m+":"+n);return m +n ;
}
}packagecom.cfets.ts.u.fxdeal.util;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;//测试类
public classMyReflect {public static void main(String[] args) throwsNoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
Class cla = ReflectUtils.class;
Method[] methods=cla.getMethods();for (int i = 0; i < methods.length; i++) {if("getSelectAll".equals(methods[i].getName())){
methods[i].invoke(cla.newInstance(),"参与xx项目改造工作量", "1800+");
}if("getAll".equals(methods[i].getName())){
methods[i].invoke(cla.newInstance());
}if("getTotal".equals(methods[i].getName())){
Object obj= methods[i].invoke(cla.newInstance(), 500, 1000);
System.out.println((Integer)obj+"----------------");
}
}
}
}--------------------------------------------------------------------------------