翻譯|使用教程|編輯:鮑佳佳|2021-04-19 10:50:38.227|閱讀 144 次
概述:如您所知,IntelliJ IDEA提供的兩種最流行的基本重構:Extract Method和Inline Method。 第一種方法使方法更短且更具可讀性,而第二種方法使不必要的方法的數量減至最少,并使代碼更直接。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
如您所知,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@fc6vip.cn
文章轉載自: