使用反射重新执行不同的方法

news2024/11/18 10:42:32

0. 用到的技术

  • 反射
  • 获取正在执行的方法名称
  • Class[]数组的获取

1. 为什么要这样做?

情况如下:

当我调用sendCommands方法发送请求时可能会收到errorCode为403也就是代码中的MDS_ERROR,就是当token(mds)失效了这种情况,我们就需要重新刷新token,并且重新执行该方法

假设还有100个sendCommands类似的方法都需要做这种处理,那么我就需要对这个100个方法做相同的处理.所以想到了用反射来帮我重新执行方法

image-20230413173458842

2. 反射改造

改造如下:

image-20230413175550870

使用redo方法的好处就是以后其他方法只要有类似操作只需要调用redo方法即可,不需要再去写一次相同代码,并且是通过反射自动完成的

如果有除了MDS_ERROR以外的errorCode也需要统一处理只需要在else if即可

image-20230413175215747

此处有个坑,我本来想用methodParam 然后map后toArray的但是会爆Object转Class异常

最后我就只有用for循环一个一个装,反正参数个数也不多

redo方法代码如下:

redo方法就是我抽取的公共重做方法

  • methodName 方法名
  • methodParam 方法参数
  • errorCode错误代码
    /**
     * 重新执行方法
     * @param methodName
     * @param methodParam
     * @param errorCode
     * @throws NoSuchMethodException
     * @throws IllegalAccessException
     * @throws InvocationTargetException
     */
    public void redo(String methodName, Object[] methodParam, String errorCode) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
        if (CarGPSErrorCode.MDS_ERROR.getErrorCode().equals(errorCode)) {
            log.error("==========="+CarGPSErrorCode.MDS_ERROR.getErrorInfo()+"=============");
            JSONObject loginResObj = reUserLogin();
            methodParam[0] = (String) loginResObj.get("mds"); //默认形参第一个为mds
            log.info("=============重新执行"+methodName+"方法===========");
            Class<? extends CarGPSConfig> carGPSConfigClass = this.getClass();
            Class<?>[] classes = new Class[methodParam.length];
            for (int i = 0; i < methodParam.length; i++) {
                classes[i] = methodParam[i].getClass();
            }
            Method method = carGPSConfigClass.getMethod(methodName, classes);
            method.invoke(this, methodParam);
        } else {
            log.error("=============重新执行"+methodName+"方法失败===========");
        }
    }

3. 小瑕疵

获取参数还需要手动填写,目前没有找到获取正在执行方法的参数的方法

如果各位大佬有方法麻烦评论一下

image-20230413175640275

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/419406.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SYN FLOOD攻击和HTTP慢速攻击实验笔记

SYN_FLOOD攻击和HTTP慢速攻击是DDOS攻击的两种方式。 SYN Flood攻击 SYN Flood攻击的原理就是阻断TCP三次握手的第三次ACK包&#xff0c;即不对服务器发送的SYNACK数据包做出应答。由于服务器没有收到客户端发来的确认响应&#xff0c;就会一直保持连接直到超时&#xff0c;当…

产品营销软文怎么写吸引人?

随着互联网的发展&#xff0c;人们获取信息的渠道变得越来越多&#xff0c;其中软文营销成为了众多企业推广自己产品的主要方式之一。那么&#xff0c;软文营销怎么写才能吸引人呢&#xff1f;这里有一些建议&#xff0c;可以帮助你解决这个问题。 要想写出一篇成功的软文&…

自拍的照片不太清晰怎么办?拍摄的模糊照片如何修复高清?

如果您的人像照片不太清晰&#xff0c;可能是由于手持相机时快门速度过慢、摄像机抖动或者焦点不准确等原因造成的。 自己拍摄的照片总是感觉不太清晰&#xff0c;放大看的话更是模糊&#xff0c;该如何是好&#xff1f; 以下是一些避免自拍照片模糊的方法&#xff1a; 1、使…

XSKY星辰天合荣获环球网“年度科技优秀创新案例”

近日&#xff0c;环球网主办的第四届环球趋势大会在广州举行&#xff0c;由环球时报、环球网联合主办的“2022 环球趋势案例征集活动”评选结果同步揭晓&#xff0c;XSKY星辰天合荣获 2022 环球趋势案例“年度科技创新优秀案例”。“2022 环球趋势案例”是人民日报旗下&#xf…

6个免费高清图库素材库,设计师、自媒体都在用~

免费高清图片素材分享&#xff0c;建议收藏起来. 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYxMjky 超大图库网站&#xff0c;含有几百万张图片素材&#xff0c;自然、植物、人物、日常、交通等涵盖多种类型&#xff0c;全部都有详细的标签分类。图片素材质量都很高…

DOM 事件相关知识总结——事件绑定、事件流(事件冒泡、捕获)

1. 事件绑定方式 1. 直接给元素添加事件属性 <input onclick"alert(我被点击了&#xff01;)" type"button" value"点我试试" />优点&#xff1a;大家都会&#xff0c;几乎所有的浏览器都支持 缺点&#xff1a;夹杂在HTML代码中&…

79-Linux_Socket实现客户端与服务器端间通讯

Socket实现客户端与服务器端间通讯一.网络编程的接口1.socket2.bind3.listen4.accept5.connect6.close7.ssize_t recv和ssize_t send8.UDP 数据读写二.tcp流式服务和粘包问题三.客户端及服务器端实现的代码.1.客户端2.服务器端一.网络编程的接口 头文件: #include <sys/typ…

win11使用移动硬盘(固态非固态)卡顿问题解决

以前win10使用移动硬盘没用出现过卡顿的问题&#xff0c;后来更新win11后&#xff0c;硬盘在处理文件和文件新建以及编辑的时候&#xff0c;都会莫名其妙卡1-3秒左右。以为是盘坏了&#xff0c;各种检测和修复。发现没有问题 后来还找移动硬盘的商家沟通&#xff0c;也无果打算…

C语言基础应用(四)选择结构

引言&#xff1a; 在日常生活中&#xff0c;我们时时刻刻面临着选择&#xff0c;在C语言中&#xff0c;如果我们需要判断条件从而实现不同的要求&#xff0c;我们就需要使用选择结构。 注&#xff1a;以下代码均未导入头文件&#xff0c;如果读者使用了代码&#xff0c;请记得…

day9 条件变量的基本使用

目录 条件变量 条件变量 应用场景&#xff1a;生产者消费问题&#xff0c;是线程同步的一种手段&#xff1b; 必要性&#xff1a;为了实现等待某个资源&#xff0c;让线程休眠&#xff0c;提高运行效率&#xff1b; 等待资源&#xff1a; //1、一直等待资源 int pthread_c…

linux 匿名文件 memfd_create

专栏内容&#xff1a;linux下并发编程个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e;目录 前言 概述 原理 接口 代码演示 结尾 前言 本专栏主要分享linux下并发编程相关知识…

慌了!ChatGPT吃我饭,还要掀我碗?

ChatGPT面世&#xff0c;各种被AI取代“失业言论”笼罩在人们头顶&#xff0c;本文聚焦这一问题&#xff0c;推荐关注ChatGPT的小伙伴阅读。 一时间火爆全网的新晋网红——ChatGPT&#xff0c;就问&#xff1a;还有谁不认识&#xff1f; 谷歌计划在旗舰搜索引擎中添加对话式人…

TCP/UDP协议 (详解)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

网络安全之入侵检测

目录 网络安全之入侵检测 入侵检测经典理论 经典检测模型 入侵检测作用与原理 意义 异常检测模型&#xff08;Anomaly Detection&#xff09; 误用检测模型&#xff08;Misuse Detection&#xff09; 经典特征案例 ​编辑自定义签名 ​编辑 签名检查过程 检测生命周期…

提升 Prometheus 的高可用性:Thanos 的部署与实践!

背景 在高可用 prometheus&#xff1a;问题集锦文章中有简单提到 Prometheus 的高可用方案&#xff0c;尝试了联邦、Remote Write 之后&#xff0c;我们最终选择了 Thanos 作为监控配套组件&#xff0c;利用其全局视图来管理我们的多地域、300集群的监控数据。本文主要介绍 Th…

NC237662 葫芦的考验之定位子串(SAM + 后缀链接树上倍增)

题意&#xff1a; 给出一个字符串S&#xff0c;|S| ≤ 250000&#xff0c;给出 Q < 250000 次询问&#xff0c;每次需要回答 S[l, r] 在 S 中共出现了多少次。 思路&#xff1a; 如果使用 SAM&#xff0c;我们提前求出每个状态的 cnt[u]&#xff0c;询问就是要求我们快速…

Nuxt3中的中间件-middleware

参考&#xff1a;nuxt3中间件(middleware)详解 - 简书nuxt3中间件(middleware)详解 在项目中有时候需要在网站切换路由的过程中添加一些自定义的逻辑&#xff0c;比如权限什么的。这个时候可以使用nuxt的middleware。 ...https://www.jianshu.com/p/bd22637c6447 中间件的作用…

【算法系列之动态规划】子序列篇

300.最长递增子序列 力扣题目链接 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1…

Ubunutu18.04+Qt5.14+Dlib19.24+Opencv3.4.16实时人眼监测实验

文章目录1 前言2 效果3 Ubuntu18.04下Qt、Opencv、Dlib的配置3.0 Ubuntu18.04的安装以及一些基本配置3.1 Qt3.2 Opencv3.3 Dlib4 核心代码4.1 pro文件4.2 Widget.cpp4.3 fatiguedetect.cpp5 资源下载1 前言 在Ubuntu18.04实现的一个人眼监测小程序&#xff0c;使用Qt5.14、Dlib…

仿京东放大镜效果的实现

仿京东放大镜 &#xff08;1&#xff09; 整个案例可以分为三个功能模块 &#xff08;2&#xff09; 鼠标经过小图片盒子&#xff0c; 黄色的遮挡层 和 大图片盒子显示&#xff0c;离开隐藏2个盒子功能 &#xff08;3&#xff09;黄色的遮挡层跟随鼠标功能。 &#xff08;4&…