鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > erlang > >

Java反射调用带参数的函数

来源:互联网 作者:佚名 时间:2016-05-12 15:55
目前本文中只考虑函数参数为基本类型、包装类型、String类型。其他负责类型,以后再慢慢补充。代码如下: package com.zkn.newlearn.reflect;import java.io.Serializable;/** * Created by zkn on 2016/5/9. */public class ReflectTest02 implements Seria

目前本文中只考虑函数参数为基本类型、包装类型、String类型。其他负责类型,以后再慢慢补充。代码如下:

package com.zkn.newlearn.reflect;

import java.io.Serializable;

/**
 * Created by zkn on 2016/5/9.
 */
public class ReflectTest02 implements Serializable{

    public void testVariableArgument(String str,char str1){
        System.out.println(str + "   "+str1);
    }
}

package com.zkn.newlearn.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

/**
 * 参数类型为基本类型、包装类型、String类型
 * 重载方法暂时没有考虑
 * 更复杂类型参数以后会补充进来
 * Created by zkn on 2016/5/9.
 */
public class ReflectTest03 {

    public static void main(String[] args){
    	List<Object> list = new ArrayList<Object>();
    	list.add("张三");
    	list.add("C");
    	//全部当做String值来传递
        executeReflectMethod("com.zkn.newlearn.reflect.ReflectTest02","testVariableArgument",list);
    }

	private static void executeReflectMethod(String className,String methodName,List<Object> list) {
		try {
            Object clazz = Class.forName(className).newInstance();
            Method[] obj = clazz.getClass().getMethods();
            for(Method method : obj){
                if(methodName!=null && methodName.equals(method.getName())){
                    //如果是private修饰符的,则把可访问性设置为true
                    if(!method.isAccessible()){
                        method.setAccessible(true);
                    }
                    //得到方法中的所有参数信息
                    Class<?>[] parameterClazz = method.getParameterTypes();
                    List<Object> listValue = new ArrayList<Object>();
                    //循环参数类型
                    for(int i=0; i<parameterClazz.length; i++){
                        fillList(listValue, parameterClazz[i],list.get(i));
                    }
                    method.invoke(clazz,listValue.toArray());
                }
            }
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
	}

	private static void fillList(List<Object> list, Class<?> parameter,Object value) {
		System.out.println(parameter.getTypeName());
		if("java.lang.String".equals(parameter.getTypeName())){
			list.add(value);
		}else if("java.lang.Character".equals(parameter.getTypeName())){
			char[] ch = ((String)value).toCharArray();
			list.add(ch[0]);
		}else if("char".equals(parameter.getTypeName())){
			char[] ch = ((String)value).toCharArray();
			list.add(ch[0]);
		}else if("java.lang.Double".equals(parameter.getTypeName())){
			list.add(Double.parseDouble((String) value));
		}else if("double".equals(parameter.getTypeName())){
			list.add(Double.parseDouble((String) value));
		}else if("java.lang.Integer".equals(parameter.getTypeName())){
			list.add(Integer.parseInt((String) value));
		}else if("int".equals(parameter.getTypeName())){
			list.add(Integer.parseInt((String) value));
		}else if("java.lang.Long".equals(parameter.getTypeName())){
			list.add(Long.parseLong((String) value));
		}else if("long".equals(parameter.getTypeName())){
			list.add(Long.parseLong((String) value));
		}else if("java.lang.Float".equals(parameter.getTypeName())){
			list.add(Float.parseFloat((String) value));
		}else if("float".equals(parameter.getTypeName())){
			list.add(Float.parseFloat((String) value));
		}else if("java.lang.Short".equals(parameter.getTypeName())){
			list.add(Short.parseShort((String) value));
		}else if("shrot".equals(parameter.getTypeName())){
			list.add(Short.parseShort((String) value));
		}else if("java.lang.Byte".equals(parameter.getTypeName())){
			list.add(Byte.parseByte((String) value));
		}else if("byte".equals(parameter.getTypeName())){
			list.add(Byte.parseByte((String) value));
		}else if("java.lang.Boolean".equals(parameter.getTypeName())){
			if("false".equals(value) || "0".equals(value)){
				list.add(false);
			}else if("true".equals(value) || "1".equals(value)){
				list.add(true);
			}
		}else if("boolean".equals(parameter.getTypeName())){
			if("false".equals(value) || "0".equals(value)){
				list.add(false);
			}else if("true".equals(value) || "1".equals(value)){
				list.add(true);
			}
		}
	}
}


网友评论
<