当前位置:网站首页>解决循环依赖import cycle not allowed的最佳解决办法
解决循环依赖import cycle not allowed的最佳解决办法
2022-08-04 06:50:00 【_七里香】
目录
总体解决策略
1,立足现有,解决问题优先
2,重新规划/设计
这两种思路并不是说哪种就一定更好,立足于实际情况来定。
方法1
思路:通过直接调换位置来解决
第一种
将要调用的模块进行复制,放到当前包下直接调用;
这样做的劣势很明显也不推荐,程序中居然有了两个一模一样的代码.
第二种
也可以移动被调用的代码,如工具性质函数放到工具包,
然后别的包去调它即可,而不是放在多个业务包下;
方法2
不是循环调用吗,也就是A调B了,B又调用A了,那么可以新增/或使用第三个包,
将其中某个被调用代码放至第三个包,这样其中一个就不会调用另外一个了,循环调用自然解决
方法3
重新规划与设计,它的实质就是统筹所有,给不同的包和文件重新归类,标准不唯一,这个没什么可说的
方法4
channel闪亮登场。
选择一个公共位置摆放channel的初始化和定义,并提供响应的可调用的函数(方法),这样的目的就是:只有别人调用它的份,它不会去调别人;
各方谁要写谁要读,你调它就好,这样可自然解决;
很多时候chan灵活运用可获得意想不到的效果。
方法5
将产生循环引用的那个作为参数传递即可,举个例子如下:
A包
函数f1:调用了B的f2
B包
调用了A的a成员
C包
需调用A包下的函数f1
这时候根据其定位与性质,如果可在调用方在处理,则可在A下的函数f1中不调用f2, 而在调用函数f1的地方加一个参数:B.f2
同时函数f1中去执行这个形参就可以了;相当于把问题转移到了C包去调用B包,而不是A包的函数f1中去调用B包
这时候就变成了:
A包
函数f1,执行时执行形参fun即可获得原来调用B的f2的结果
B包
调用了A的a成员
C包
调用A包下的函数f1:A.f1(fun B.f2)
即执行A.f1时将B.f2传入,问题亦可迎刃而解。
边栏推荐
- Distributed Computing Experiment 3 PRC-based Book Information Management System
- 一天学会JDBC06:PrepaerdStatemtnt
- 拒绝碰运气,导师人品这样了解!
- Redis非关系型数据库
- MySQL外键(详解)
- Sql优化总结!详细!(2021最新面试必问)
- Praat:语音标注工具【保存为TextGrid文件】
- Error ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol requested by serv
- 有人试过用NPGsql驱动连接openGauss开发应用的吗?
- CSRF和SSRF漏洞
猜你喜欢
随机推荐
MAML principle explanation and code implementation
登录拦截实现过程
有趣的USB接口和颜色分类
babylon 里面加gltf 模型
SQL如何从字符串截取指定字符(LEFT、MID、RIGHT三大函数)
【学习笔记】状压dp
MySQL BIGINT 数据类型
likeshop外卖点餐系统【100%开源无加密】
MySQL外键(详解)
西门子PLC1200与fanuc机器人进行profibus通讯
Mysql insert on duplicate key 死锁问题定位与解决
matlab科研绘图模板,直接奉上源代码!
数据特征预处理——缺失值的查看方式及处理
如何用matlab做高精度计算?【第一辑】
2022爱分析· 银行数字化厂商全景报告
MySQL面试题大全(陆续更新)
【论文笔记】—低照度图像增强—Supervised—RetinexNet—2018-BMVC
经典新诗九首
字节跳动岗位薪酬体系曝光,看完我真的酸了...
一天学会JDBC06:PrepaerdStatemtnt