提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:鲍佳佳|2021-04-19 10:50:38.227|阅读 144 次
概述:如您所知,IntelliJ IDEA提供的两种最流行的基本重构:Extract Method和Inline Method。 第一种方法使方法更短且更具可读性,而第二种方法使不必要的方法的数量减至最少,并使代码更直接。
#慧都22周年庆大促·界面/图表报表/文档/IDE/IOT/测试等千款热门软控件火热促销中>>
相关链接:
如您所知,IntelliJ IDEA提供的两种最流行的基本重构:Extract Method和Inline Method。
第一种方法使方法更短且更具可读性,而第二种方法使不必要的方法的数量减至最少,并使代码更直接。
在IntelliJ IDEA中,您可以连续使用这两种操作来获得更复杂的结果-我们将此过程称为多步骤重构。
让我们来看看,看看我们可以做些什么,用更少的成本实现更多。
问题
假设我们有一个只检查一个条件的方法:
void repair(Vehicle vehicle) {
if (vehicle instanceof Car) {
System.out.println("Repairing: " + vehicle);
} else {
System.out.println("Cannot repair this: " + vehicle);
}
}
仅当将Car对象传递给repair method()时,才会执行“ Repairing:”分支。
在其他情况下,将执行另一个分支。
因此,例如,如果我们有一个Trucktype对象,我们将看到来自else分支的输出。
这可能不完全是我们想要的结果。 现有的检查非常粗糙,仅允许我们用方法修理汽车。
如果我们还想修理其他车辆(例如卡车),而该轮胎只有一个小问题(例如轮胎漏气),该怎么办?
假设我们已经有一种检查这种情况的方法:
private boolean checkClient(Vehicle vehicle)
{
return (vehicle instanceof Car || vehicle.failureCondition == Vehicle.FailureCondition.FLAT_TIRE);
}
我们将如何与调用该方法来取代我们现有的检查?
解决方案
通过“提取方法”重构,我们将把Car的车辆实例提取为“临时方法”。 我们将Car的方法body return vehicle instance更改为return checkClient(vehicle),然后内联我们的方法以更改代码并产生以下结果,这将解决Truck对象的问题:
void repair(Vehicle vehicle) {
if (checkClient(vehicle)) {
System.out.println("Repairing: " + vehicle);
} else
{
System.out.println("Cannot repair this: " + vehicle);
}
}
让我们逐步看一下重构过程:
我们选择我们的表达式车辆实例Car,按macOs的⌥⌘M或Windows的Ctrl+Alt+M。
请注意,如果在代码中发现重复项,则IntelliJ IDEA还会在“提取方法”对话框中显示通知。
重构之后,我们将获得“临时”方法:
private boolean isaBoolean(Vehicle vehicle) { return vehicle instanceof Car; }
现在,我们将主体返回车辆instanceof的方法更改Car为return checkClient(vehicle)。
让我们选择提取方法的名称, 对于macOsisaBoolean按⌥⌘N,对于Windows按Ctrl + Alt + N。
请注意,在“内联方法”对话框中选择了“全部内联并删除方法”选项。 IntelliJ IDEA删除了我们的“临时”方法,并将条件更改为我们的原始方法:
class CarMechanic {
void repair(Vehicle vehicle) {
if (checkClient(vehicle)) {
System.out.println("Repairing: " + vehicle);
} else
{
System.out.println("Cannot repair this: " + vehicle);
}
}
通过这个例子我们可以看到,结合Extract Method和Inline Method重构可以解决更复杂的问题。
我们改变了应用逻辑,现在当运行下面最后三行代码时,可以看到我们的代码不仅可以处理Car,而且在需要小修时也可以处理Truck,而在我们进行多步骤重构之前,并不是这样的。
class RepairShop { public static void main(String[] args) { CarMechanic cm = new CarMechanic(); Vehicle v1 = new Car(Vehicle.FailureCondition.ENGINE_FAILURE); Vehicle v2 = new Truck(Vehicle.FailureCondition.ENGINE_FAILURE); Vehicle v3 = new Truck(Vehicle.FailureCondition.FLAT_TIRE); cm.repair(v2);//Repairing: Car, ENGINE_FAILURE cm.repair(v2);//Cannot repair this: Truck, ENGINE_FAILURE cm.repair(v3);//Repairing: Truck, FLAT_TIRE } }
您并不总是需要复杂的解决方案来有效地重构代码-有时您只需要了解基础知识即可。
好了这就是今天的内容了,如果今天的文章未解决你的需求,可点击获取更多免费教程。不要忘了在评论与我们分享您的想法和建议,慧都作为IntelliJ IDEA正版合作商,我们推出"软件国产化服务季"活动(点击查看详情)!现IntelliJ正版授权在线订购最高立减3000元!低至1333!还有多种授权方式供你选择。
====================================================
想要了解或购买IntelliJ IDEA正版授权的朋友,欢迎
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@dmsbdw.cn
文章转载自:



在现代软件开发过程中,自动化单元测试是确保代码质量与可靠性的关键环节。尤其对于特定框架(如MFC)的代码,测试复杂度显著增加,常因依赖外部资源或交互操作而难以在静默环境中顺利执行。Parasoft C/C++test作为专业的软件测试工具,致力于帮助开发团队高效实施自动化测试,通过其强大的桩函数功能,能够有效模拟依赖组件的行为,从而实现对复杂逻辑的隔离测试。
本文将为大家介绍如何在MyEclipse中使用XDoclet开发EJB 2 Session Bean,欢迎下载最新版体验!
如果能将 CSV 自动转换为 PDF ,就能快速生成清晰、美观的报表,既节省手动排版时间,又能保持数据的专业呈现。本文将介绍如何使用 Spire.XLS for Java 实现这一过程——从加载 CSV 到输出高质量 PDF,仅需数行代码即可完成。
Parasoft C/C++test是一款专为C/C++代码设计的自动化测试工具,通过静态代码分析、单元测试和运行时错误检测等功能,帮助开发团队在早期发现并修复缺陷,提升代码质量和开发效率 。在实际使用中,尤其是在VC6此类旧版开发环境中执行单元测试时,可能会因环境兼容性问题触发链接错误。
相关产品
IntelliJ在业界被公认为优秀的Java开发平台之一,在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面表现突出,并支持基于Android平台的程序开发。
最新文章 MORE
星空外围足球网(相关的文章 MORE
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@dmsbdw.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
星空外围足球网(