如果getDeclaredMethod足够,为什么我要使用java代理

时间:2014-12-08 09:57:21

标签: java proxy

我在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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

动态代理用于为接口提供实现,这些接口可以传递给期望这些接口的其他代码。