首页 > 其他分享 >直播app开发,利用MethodHandle实现super关键字功能

直播app开发,利用MethodHandle实现super关键字功能

时间:2022-11-08 14:35:39浏览次数:35  
标签:java app class MethodHandle onCreate super public

直播app开发,利用MethodHandle实现super关键字功能

Java版(仅jdk1.7+)

 


import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Field;
 
public class JavaMethodHandleHelper {
    static MethodHandles.Lookup lookup = MethodHandles.lookup();
 
    static {
 
        try {
            Field allowedModes = MethodHandles.Lookup.class.getDeclaredField("allowedModes");
            allowedModes.setAccessible(true);
            allowedModes.set(lookup, -1);  
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
    public static Object callSuperMethod(Object object, String name, String descriptor, Object... params) {
        try {
            return lookup.findSpecial(
                    object.getClass().getSuperclass(),
                    name,
                    MethodType.fromMethodDescriptorString(descriptor, null),
                    object.getClass()).
                    bindTo(object).
                    invokeWithArguments(params);
 
        } catch (Throwable t) {
            t.printStackTrace();
        }
        return null;
    }
 
 
}

 

测试

 


public class ExampleUnitTest {
    class A {
        protected void onCreate() {
            System.out.println("call A onCreate()");
        }
    }
    class B extends A {
        @Override
        public void onCreate() {
            JavaMethodHandleHelper.callSuperMethod(this,"onCreate","()V");
            System.out.println("call B onCreate()");
        }
    }
 
    @Test
    public void testMethodHandle() {
        new B().onCreate();
    }
 
}

 

以上就是 直播app开发,利用MethodHandle实现super关键字功能,更多内容欢迎关注之后的文章

 

标签:java,app,class,MethodHandle,onCreate,super,public
From: https://www.cnblogs.com/yunbaomengnan/p/16869607.html

相关文章

  • 各类好用的手机浏览器(Android & apple)
    各类好用的手机浏览器(Android&apple) 点击前往Ayouth的GreasyFork主页Ayouth自建Firefox扩展官网镜像,可下载AdGuard等强力去广告并保护隐私的扩展点击前往Firefox......
  • app日常优化总结
    滑动冲突有时候viewpager嵌套webview后,左右滑动冲突,直接消费或者处理拦截导致上下不能滑动,所以需要根据滑动情况判断处理,只在上下滑动时判断事件交给子viewclassScroll......
  • uniapp打包小程序运行到微信开发工具
    1.在manifest.json文件中配置AppID  2.在HBuilderX中配置微信开发者工具的安装路径。工具->设置->运行设置 3.  在微信开发者工具中配置设置->安全设置->开启......
  • uniapp不使用自定义tabbar的情况下隐藏指定的tabbar
    uni给提供的api中uni.hideTabBar()是控制所有的tabbar显示和隐藏,并不能达到我们想要的效果图,但是我仔细看过文档后发现uni.setTabBarItem()中有visible这个选项控......
  • 如何使用 button 唤起 uni-app 的 uni-file-picker
    最近碰到一个需求,就是在头像下方可以点击更换头像,同时,点击头像也可以更换头像。因为项目用的是uni-app,所以说到上传头像,就想到了 uni-file-picker,但是我翻完了 uni-fil......
  • uniapp/微信小程序 项目day03
    一.商品列表1.1获取数据首先能够进入商品列表的途径传的数据有了解了这个之后就可以开始了,先创建分支创建编译模式,并分配初试数据这个时候就可以获取数据了......
  • boostrap.yml 与 application.yml 详解
    boostrap.yml与application.yml详解​ 官方解释:SpringBoot中有两种上下文,bootstrap和applicationbootstrap:应用程序的父上下文,即bootstrap加载优先于applicato......
  • Application Verifier使用起步
      网上ApplicationVerifier(以下称AppVerf)关于的功能介绍已经很多,却鲜有介绍实际使用的文章(说真的,我很怀疑这些作者有没有用AppVeri测过程序),谨以此文总结我在使用过......
  • 最新抖音数据分析app爬虫
    我们提供封装好的抖音数据采集接口,实时采集,接口稳定。长期维护使用便宜接口使用详情请参考接口地址:github访问地址:github.com/ping0206guo…全部支持的接口如下,并且......
  • Python基础之面向对象:4、super方法实战
    派生方法实战​ 以上我们学习了通过super()的方法可以重写父类、额外添加父类中的数据,下面将通过实战案例来讲述super()方法来重写、添加父类中的功能代码需求:1、使用js......