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; } }