Java 能否多重反射
高洛峰
高洛峰 2017-04-17 11:01:49
0
3
370

Java反射机制能否支持多重反射。

如,动态invoke一个方法里还有一个invoke

求大牛详解!

若不能,有没有其它偏方可以实现这种效果?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
阿神

我试验了一下,这是没有任何问题的。

代码:

// Main.java
class Main {
    public void static main(String[] args) {
        try {
            Class<?> c = Class.forName(args[0]);
            Object o = c.newInstance();
            Method m = c.getMethod("doSth");
            m.setAccessible(true);
            m.invoke(o);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    } 
}

// A.java
class A {
    public void doSth() {
        System.out.println("Inside A.doSth: using reflection to call B");

        try {
            Class<?> c = Class.forName("B");
            Object o = c.newInstance();
            Method m = c.getMethod("doOther");
            m.setAccessible(true);
            m.invoke(o);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

// B.java
class B {
    public void doOther() {
        System.out.println("Inside B");
    }
}
伊谢尔伦

只要是签名合法的方法的字节码都是可以invoke的,和方法中的字节码具体做什么没有关系也没有限制。

但是你要想好为什么这么做。

Greenspun's tenth rule of programming:

Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.

刘奇

当然可以。只要你能看懂其间多次反射的逻辑。。。。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!