Java之反射调用
反射调用方法:
import java.util.List;
import org.apache.commons.lang.StringUtils;
/**
*
*反射基类
* @ClassName: Inject
* <b>Copyright 2018 中国外汇交易中心 All Rights Reserved</b>
* @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<Integer>
* @throws
*/
private static List<Integer> getScoreAll(Integer eng, Integer cn, Integer math){
List<Integer> list = new ArrayList<Integer>();
list.add(eng);
list.add(cn);
list.add(math);
if(list.size() >= 0){
return list;
}
return null;
}
}
Class<Inject> 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();
}
}
-------------------------------------------------------------------------------- 反射之第二阶段: package com.cfets.ts.u.fxdeal.util; public class ReflectUtils { public void getSelectAll(String name1, String name2){ System.out.println(name1+":"+name2); } public void getAll(){ System.out.println("无参数"); } public int getTotal(int m, int n){ System.out.println(m+":"+n); return m + n ; } } package com.cfets.ts.u.fxdeal.util; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; // 测试类 public class MyReflect { public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException { Class<ReflectUtils> 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+"----------------"); } } } } --------------------------------------------------------------------------------