java反射

package hashMap;

import java.io.FileInputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;

import java.util.List;
import java.util.Properties;
class ReflectTest 
{
	

	//用反射产生对象并返回该对象
	public Object getObject(Class cl,String[] args) throws Exception
	{
		int con_Count = Integer.parseInt(args[1]);
		Object o = null;
		if(con_Count==0)
		{
			o = cl.newInstance();
		}
		else
		{
			Class[] con_Args = new Class[con_Count];
			Object[] obj_Args = new Object[con_Count];
			Object[] oo = null;
			for(int i=0;i<con_Count;i++)
			{
				oo = turn(args[2+i],args[2+i+con_Count]);

				con_Args[i] = (Class)oo[0];
				obj_Args[i] = oo[1];

			}
			Constructor con = cl.getDeclaredConstructor(con_Args);
			o = con.newInstance(obj_Args);
		}
		return o;
	}

	//用反射执行某一方法并返回结果
	public Object invoke(Class cl,Object o,String[] args) throws Exception    
	{
		int con_Count = Integer.parseInt(args[1]);
		String methodName = args[2+2*con_Count];		
		int me_Count = Integer.parseInt(args[3+2*con_Count]);
		Class[] me_Args = new Class[me_Count];
		Object[] me_Obj_Args = new Object[me_Count];
		Object[] oo = null;
		for(int i=0;i<me_Count;i++)
		{
			oo = turn(args[4+2*con_Count+i],args[4+2*con_Count+i+me_Count]);

			me_Args[i] = (Class)oo[0];
			me_Obj_Args[i] = oo[1];			
		}

		Method m = cl.getDeclaredMethod(methodName,me_Args);
		Object res = m.invoke(o,me_Obj_Args);
		//System.out.println("方案执行结果:"+res);
		return res;
	}

	public Object[] turn(String cType,String oArg)
	{
		Object[] o = new Object[2];

		if(cType.equals("int"))
		{
			o[0] = int.class;
			o[1] = Integer.parseInt(oArg);
		}
		if(cType.equals("String"))
		{
			o[0] = String.class;
			o[1] = oArg;
		}
		if(cType.equals("float"))
		{
			o[0] = float.class;
			o[1] = Float.parseFloat(oArg);
		}
		if(cType.equals("char"))
		{
			o[0] = char.class;
			o[1] = oArg.charAt(0);
		}
		if(cType.equals("boolean"))
		{
			o[0] = boolean.class;
			o[1] = Boolean.parseBoolean(oArg);
		}
		return o;
	}
}
public class PropertiesTest
{

	
	public static void main(String[] args) throws Exception
	{
		Properties p = new Properties();
		p.load(new FileInputStream("test.ini"));
		List list = new ArrayList();
		Enumeration<String> e = (Enumeration<String>) p.propertyNames();
		while(e.hasMoreElements())
		{
			String key = e.nextElement();
			byte[] data = p.getProperty(key).getBytes("iso8859-1");
			System.out.println(key+"="+new String(data,"gb2312"));
			list.add(key);
		}
		
		Collections.sort(list);
		//System.out.println(list);
		String[] s = new String[list.size()];
		for(int i=0;i<list.size();i++)
		{
		//	System.out.println(p.getProperty((String) list.get(i)));
			byte[] data = p.getProperty((String) list.get(i)).getBytes("iso8859-1");
			list.set(i,new String(data,"gb2312"));
			s[i]=(String) list.get(i);
		}
      ReflectTest rt = new ReflectTest();
	
		
		Class cl = Class.forName(s[0]);
		
		Object o = rt.getObject(cl,s);
		rt.invoke(cl,o,s);
	  
	}

}
class TTest
{
	public int a;
	public String name;
	public TTest(int a,String name)
	{
		this.a=a;
		this.name=name;
	}
	public static void ff(int n,String m)
	{
		System.out.println("你传入的证书是:"+n+m);

	}
//	public static void f()
//	{
//		System.out.println("我是一个什么参数都不带的函数");
//	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值