java反射之Method的invoke方法实现教程详解
在框架中经常会会用到method.invoke()方法,用来执行某个的对象的目标方法。以前写代码用到反射时,总是获取先获取Method,然后传入对应的Class实例对象执行方法。然而前段时间研究invoke方法时,发现invoke方法居然包含多态的特性,这是以前没有考虑过的一个问题。那么Method.invoke()方法的执行过程是怎么实现的?因此,这里会调用Cat.print()方法;而catMethod.invoke中,传入的参数类型Animal是父类,却期望调用子类Cat的方法,因此这一次会抛出异常。override属性是Method的父类AccessibleObject中声明的变量,使得程序可以控制是否跳过访问权限的检查。虽然Method中,通过维护root引用意图使相同的方法始终保持只有一个methodAccessor实例,但是上述方法仍然无法保证相同的方法只有一个methodAccessor实例。从而出现了相同的方法中出现了两个methodAccessor实例对象的现象。
用户评论