Java深入探究中,Method的Invoke方法如何灵活运用在长尾场景中实现高效调用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4490个文字,预计阅读时间需要18分钟。
前言:在编写代码的时候,发现从父类`class`通过`getDeclaredMethod`获取的`Method`可以调用子类的对象,而子类修改了该方法,从子类`class`通过`getDeclaredMethod`同样可以获取到`Method`,此时去调用父类的对象。
结果:通过`getDeclaredMethod`获取的`Method`可以调用不同类层次的对象,即使子类修改了方法,父类对象仍可调用修改后的方法。
前言
在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到Method,这时去调用父类的对象也会报错。虽然这是很符合多态的现象,也符合java的动态绑定规范,但还是想弄懂java是如何实现的,就学习了下Method的源代码。
Method的invoke方法
1.先检查 AccessibleObject的override属性是否为true。
AccessibleObject是Method,Field,Constructor的父类,override属性默认为false,可调用setAccessible方法改变,如果设置为true,则表示可以忽略访问权限的限制,直接调用。
2.如果不是ture,则要进行访问权限检测。
本文共计4490个文字,预计阅读时间需要18分钟。
前言:在编写代码的时候,发现从父类`class`通过`getDeclaredMethod`获取的`Method`可以调用子类的对象,而子类修改了该方法,从子类`class`通过`getDeclaredMethod`同样可以获取到`Method`,此时去调用父类的对象。
结果:通过`getDeclaredMethod`获取的`Method`可以调用不同类层次的对象,即使子类修改了方法,父类对象仍可调用修改后的方法。
前言
在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到Method,这时去调用父类的对象也会报错。虽然这是很符合多态的现象,也符合java的动态绑定规范,但还是想弄懂java是如何实现的,就学习了下Method的源代码。
Method的invoke方法
1.先检查 AccessibleObject的override属性是否为true。
AccessibleObject是Method,Field,Constructor的父类,override属性默认为false,可调用setAccessible方法改变,如果设置为true,则表示可以忽略访问权限的限制,直接调用。
2.如果不是ture,则要进行访问权限检测。

