当前位置:网站首页>解决循环依赖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传入,问题亦可迎刃而解。
边栏推荐
- 分布式计算实验1 负载均衡
- matlab科研绘图模板,直接奉上源代码!
- 设置el-table自动向下滑动(不多解释,直接代码实现)
- Promise.all 使用方法
- IDEA中创建编写JSP
- SQL存储过程详解
- Error EPERM operation not permitted, mkdir ‘Dsoftwarenodejsnode_cache_cacach两种解决办法
- unity webgl报 Uncaught SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON
- 使用腾讯云发送短信 ---- 手把手教你搞定所有步骤
- MYSQL JDBC图书管理系统
猜你喜欢

CSRF和SSRF漏洞

零分贝超静音无线鼠标!数量有限!!先到先得!!!【元旦专享】

花了近70美元入手的学生版MATLAB体验到底如何?

开发小技巧 navicate如何点击单元格显示全部的文本内容或通过图像查看内容

MAML principle explanation and code implementation

Lightweight Backbone VGNetG Achieves "No Choice, All" Lightweight Backbone Network

SQL去重的三种方法汇总

关于我写的循环遍历

MySQL面试题大全(陆续更新)

Error EPERM operation not permitted, mkdir ‘Dsoftwarenodejsnode_cache_cacach两种解决办法
随机推荐
两日总结七
C语言指针
【论文笔记】—低照度图像增强—Supervised—RetinexNet—2018-BMVC
手把手教你Charles抓包工具使用
【字符串】最小表示法
电商系统PC商城模块介绍
ConstraintSet of animation of ContrstrainLayout
分布式计算实验4 随机信号分析系统
玩转TypeScript对象、对象作为参数进行函数传递、接口和内置对象[无敌态]
一天学会JDBC06:PrepaerdStatemtnt
将回调函数转为Flow
反射与枚举
专题讲座7 计算几何 学习心得
国内外知名源码商城系统盘点
【selenium自动化】第四篇,结合testNg
舍不得花钱买1stOpt,不妨试试这款免费的拟合优化神器【openLU】
【深度学习实践(二)】上手手写数字识别
有趣的USB接口和颜色分类
MySQL基础(DDL、DML、DQL)
likeshop外卖点餐系统【100%开源无加密】