比如定义了一个接口 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 是动态生成的)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.