java反射

import java.lang.reflect.Method;

public class ClassA 
{
        //ClassA里面有add、和StringAdd两个不同方法。c是ClassB的Object
	 ClassB c=new ClassB();
	 public void add(Integer param1, Integer param2) 
	   {  
	     System.out.println(param1 + param2);  
	   }
	 public void StringAdd(String abc)
	 {
	   System.out.println("out"+abc);
	 }
	 public static void main(String[] args)
	 {
		  ClassA a=new ClassA();
		  try 
		  {
		   a.c.invokeMehton(a, "add",new Object[] {new Integer(100),new Integer(200)});//反射调用方法add
		   a.c.invokeMehton(a, "StringAdd",new Object[] {new String("abccc")});//反射调用方法StringAdd
		  } 
		  catch (Exception e) 
		  {
		   // TODO Auto-generated catch block
		   e.printStackTrace();
		  }
	 }
}
class ClassB
{
 public ClassB()
 {
  System.out.println("this is ClassB");
 }

 public Object invokeMehton(Object owner,String methodName,Object[] args) throws Exception
 {
                  //根据methodName获得owner里面的方法。args是对应方案参数。
  Class wnerClass=owner.getClass();
  Class[] argsClass=new Class[args.length];
  for(int i=0,j=args.length;i<j;i++)
  {
    argsClass[i] = args[i].getClass();
  }
  Method method = wnerClass.getMethod(methodName, argsClass); 
  return method.invoke(owner, args);
 }
}

 

import java.lang.reflect.*;
class InvokeMethods
{
	public static void main(String [] args)
	{
		Employee emp=new Employee();
		Class c1=emp.getClass();
		try
		{
			Method sAge=c1.getMethod("setAge",new Class[]{int.class});
			Method gAge=c1.getMethod("getAge",null);
			Method pName=c1.getMethod("printName",new Class[]{String.class});
			Object[] args1 ={new Integer(25)};
			sAge.invoke(emp,args1);
			Integer AGE=(Integer)gAge.invoke(emp,null);
			int age=AGE.intValue();
			System.out.println("The Employee Age is:"+age);
			Object [] args3={new String("Jack")};
			pName.invoke(emp,args3);
		
		}
		catch (Exception e)
		{
			e.printStackTrace();
			
		}
		System.exit(0);
	}
};
class Employee
{
	public Employee()
	{
		age=0;
		name=null;
	}
	public void setAge(int a)
	{
		age=a;
	}
	public int getAge()
	{
		return age;
	}
	public void printName(String n)
	{
		name=n;
		System.out.println("The Employee Name is:"+name);
	}
	private int age;
	private String name;
};

 

import java.lang.reflect.*;
public class InvokeTest {

	/**
	 * @param args
	 */
	private static String algorithm="Algorithm";
	static Object invokeMethod(Object instance,String fun,Class[] paras,Object[] paraValue)
	{
		Object result=null;
		Method method = null;
		try
		{
			method=instance.getClass().getMethod(fun, paras);
			
		}
		catch(Exception e)
		{
		 e.printStackTrace();
		 result=null;
		}
		return method;
	}
	public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException 
	{
		// TODO Auto-generated method stub
		int x=10,y=20;
		invokeMethod(Class.forName(algorithm).newInstance(),"add",new Class[]{int.class,int.class},new Object[]{new Integer(5),new Integer(5)});

	}

}
class Algorithm
{
  public int add(int a,int b)
  {
    System.out.println(a+b);
	return 0;
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值