Java的Invoke反射
类A中有一个成员是类B的对象c,如何在c中调用A的成员方法或者向A传递参数,发信号。多谢。
回答:
可以使用invoke反射,实现这样的机制。其实也就是Spring里面的Ioc了。
最好是用第三方做运行载体。我这里为了描述方便,也放在ClassB里面的Object c通过Invoke调用这两方法
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 argsClass[i] = args[i].getClass(); } Method method = ownerClass.getMethod(methodName, argsClass); return method.invoke(owner, args); } }
输出为
this is ClassB
300
outabccc
说明c调用Class方法成功。
可以看看设计模式和Invoke相关的文章,方便理解
浙公网安备 33010602011771号