反射调用方法:

import java.util.ArrayList;
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;
    }
}

 

public static void main(String[] args) {
        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+"----------------");
            }
        }
       
    }

}
--------------------------------------------------------------------------------

 

版权声明:本文为lhl-shubiao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lhl-shubiao/articles/10734417.html