我在java中实现类似ruby的send方法,我认为它实现了动态调用,我的问题是否仍需要java动态代理?
这是我的代码:
/**
* Created by roroco on 12/8/14.
*/
final class C {
public void methInC(String arg) {
System.out.println(arg + "\t\t" + new Exception().getStackTrace()[0].getFileName() + ":" + new Exception().getStackTrace()[0].getLineNumber());
}
}
class C2 {
C c;
public C2() {
this.c = c;
}
public void send(String methName, Object... args) {
try {
ArrayList types = new ArrayList();
for (Object o : args) {
types.add(o.getClass());
}
Class[] klsColl = (Class[]) types.toArray(new Class[]{});
C.class.getDeclaredMethod(methName, klsColl).invoke(new C(), args);
} catch (IllegalAccessException e) {
e.printStackTrace();
System.exit(-1);
} catch (InvocationTargetException e) {
e.printStackTrace();
System.exit(-1);
} catch (NoSuchMethodException e) {
e.printStackTrace();
System.exit(-1);
}
}
}
答案 0 :(得分:0)
动态代理用于为接口提供实现,这些接口可以传递给期望这些接口的其他代码。