84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
Java反射机制能否支持多重反射。
如,动态invoke一个方法里还有一个invoke
求大牛详解!
若不能,有没有其它偏方可以实现这种效果?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
我试验了一下,这是没有任何问题的。
代码:
// 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.
当然可以。只要你能看懂其间多次反射的逻辑。。。。
我试验了一下,这是没有任何问题的。
代码:
只要是签名合法的方法的字节码都是可以invoke的,和方法中的字节码具体做什么没有关系也没有限制。
但是你要想好为什么这么做。
Greenspun's tenth rule of programming:
当然可以。只要你能看懂其间多次反射的逻辑。。。。