比如定义了一个接口 IHello:
interface IHello { void printHello(); } 以及一个 User 类:
class User { IHello ihello; public User(){} public void setIHello(IHello hello){ this.ihello = hello; } public void sayHello(){ iHello.printHello(); } } 在实际调用时,采用动态代理先生产 IHello 的实例,然后设置到 User 对象中调用是可以的:
Ihello hello = (IHello) new DynamicProxy().bind(new Hello()); User user = new User(); user.setIHello(hello); user.sayHello(); 现在某些情况下,我要通过反射的方式设置 User 中的成员变量,我是这么写的:
Ihello hello = (IHello) new DynamicProxy().bind(new Hello()); User user = new User(); Class<?> parmeter = new Class[1]; parmeter[0] = hello.getClass(); // 获取方法时出错 Method setHello = user.getClass().getDeclaredMethod("setIHello", parmeter); setHello.invoke(user,hello); 在上面一句获取方法时出错了,报错内容为 NoSuchMethodException,因为 parmeter 类型不对。
请教应该怎么改呢?
(上面那句改成 getDeclaredMethod("setIHello", IHello.class)肯定是可以的,问题是现在不希望指定类型,而希望 parmeter 是动态生成的)
