直播app开发,利用MethodHandle实现super关键字功能
直播app开发,利用MethodHandle实现super关键字功能
Java版(仅jdk1.7+)
1 | <br>import java.lang.invoke.MethodHandle;<br>import java.lang.invoke.MethodHandles;<br>import java.lang.invoke.MethodType;<br>import java.lang.reflect.Field;<br> <br> public class JavaMethodHandleHelper {<br> static MethodHandles.Lookup lookup = MethodHandles.lookup();<br> <br> static {<br> <br> try {<br> Field allowedModes = MethodHandles.Lookup. class .getDeclaredField( "allowedModes" );<br> allowedModes.setAccessible(true);<br> allowedModes.set(lookup, -1); <br> } catch (Exception e) {<br> e.printStackTrace();<br> }<br> <br> }<br> <br> public static Object callSuperMethod(Object object, String name, String descriptor, Object... params) {<br> try {<br> return lookup.findSpecial(<br> object.getClass().getSuperclass(),<br> name,<br> MethodType.fromMethodDescriptorString(descriptor, null),<br> object.getClass()).<br> bindTo(object).<br> invokeWithArguments(params);<br> <br> } catch (Throwable t) {<br> t.printStackTrace();<br> }<br> return null;<br> }<br> <br> <br>} |
测试
1 | <br> public class ExampleUnitTest {<br> class A {<br> protected void onCreate() {<br> System.out.println( "call A onCreate()" );<br> }<br> }<br> class B extends A {<br> @Override<br> public void onCreate() {<br> JavaMethodHandleHelper.callSuperMethod(this, "onCreate" , "()V" );<br> System.out.println( "call B onCreate()" );<br> }<br> }<br> <br> @Test<br> public void testMethodHandle() {<br> new B().onCreate();<br> }<br> <br>} |
以上就是 直播app开发,利用MethodHandle实现super关键字功能,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-11-08 短视频app开发,短视频动态功能上传图片时,规定图片压缩的大小
2021-11-08 短视频程序开发,RecyclerView自带的滚动条
2021-11-08 app直播源码,TextView部分字体颜色高亮