標籤:
Eclipse中的重構類型
如果你看一下Eclipse的重構菜單,可以看到四部分。第一部分是撤銷和重做。其他的三部分包含Eclipse提供的三種類型的重構。
第一種類型的重構改變代碼的物理結構,像Rename和Move。第二種是在類層次上改變代碼結構,例如Pull Up和Push Down。第三種是改變類內部的代碼,像Extract Method和Encapsulate Field。這三部分的重構列表如下。
類型1 物理結構
l Rename
l Move
l Change Method signature
l Convert Anonymous Class to Nested
l Convert Member Type to New File
類型2 類階層
l Push Down
l Push Up
l Extract Interface
l Generalize Type (Eclipse 3)
l User Supertype Where Possible
類型3 類內部結構
l Inline
l Extract Method
l Extract Local Variable
l Extract Constant
l Introduce Parameter
l Introduce Factory
l Encapsulate Field
Rename:
Rename用來改變一個Java元素的名字。雖然你可以手工改變Java檔案Java元素的名字,但是這樣不能自動更新所有引用它們的檔案或Java元素。你必須在項目中搜尋檔案然後手工替換這些引用。很可能你就會漏掉一個或者改錯一個。Rename重構會智能的更新所有有此引用的地方。
有時候,Java元素的名字不是很明了,或者它的功能已經改變了。為了保持代碼的可讀性,該元素的名字也要更新。使用Rename重構,能夠十分快捷的更新元素的名字和所有引用它的地方。
要為一個Java元素改名,在包瀏覽視圖或大綱視圖選中該元素,從重構菜單中選擇Rename項,或者使用快速鍵Alt+Shift+R。Rename對話方塊會出現。在這裡添入新的名字,選擇是否更新該元素的引用。點擊預覽按鈕,會開啟預覽視窗,在這裡,你可以看到那些內容會被改變。點擊OK按鈕,重構結束。
Move
Move和Rename很相似。它用來把元素從一個位置移動到另一個位置。它主要用來將類從一個包移動到另一個包。選中要移動的元素,從重構菜單中選擇Move,或者使用快速鍵,Alt+Shift+V,在快顯視窗中選擇要移動的目的地。你仍然可以用預覽功能檢查一下有什麼改變,也可以按OK按鈕直接讓其生效。
Change Method Signature
更改方法簽名能夠改變參數名,參數類型,參數順序,傳回型別,以及方法的可見度。也可以添加,刪除參數。
要執行此重構,選擇要重構的方法,選中重構菜單的更改方法簽名項,會出現更改方法簽名對話方塊。
在此對話方塊中選擇方法的修飾詞,傳回型別,參數。參數的添加,修改,移動,刪除可以通過右邊的按鈕控制。當添加新的參數時,會自動賦予預設值。凡是調用此方法的地方都會用此預設值作為參數輸入。
改變方法簽名可能在方法中導致問題,如果有問題,當你點擊預覽或OK時,會被標記出來。
Move Members Type to New File
此重構將嵌套類轉為一個單獨類。將會建立一個新的Java檔案包含此嵌套類。選中要重構的類,在重構菜單上選擇Move Member Type to New File項,在彈出的對話方塊中添入要建立的執行個體的名字。
Push Down
此重構將算中的方法和成員從父類中移動到它的直接子類中,所有下推的方法都可選作為一個抽象方法留在父類中。下推重構對於重新構建項目設計十分有用。
選擇若干方法或成員,從重構菜單中選擇下推項,彈出下推對話方塊。
在此對話方塊中,可以分別選擇方法或成員,所有選中元素都會移動到當前類的子類中。當點擊Add Required按鈕時,所有已選擇元素所必需的元素也會自動選上,此行為並不能保證所有必須的元素都能自動選中,還是需要人工確認。當有方法被選中時,編輯按鈕就會可用,點擊編輯按鈕,彈出編輯對話方塊。在其中可以選擇為選中方法在當前類中遺留抽象方法,還是在當前類中刪除這些方法。雙擊一天選中的方法,也可以開啟編輯對話方塊。在方法的Action列點擊,會出現一個下拉式清單,可以在其中選擇遺留抽象方法還是在當前類中刪除方法。按斷行符號鍵確認編輯結果。
Pull Up
上移與下推類似,也是在類之間移動方法和成員。上移將方法或成員從一個類移動到它的一個父類中。選中若干個方法或成員,在重構菜單中選擇上移項,上移嚮導馬上會出現。
在選擇目標類多選框中,列出了當前類繼承的所有父類。你只能將方法或成員移動到它們其中的一個裡面。
如果在選中方法的Action列,被設定成在目標類中聲明抽象方法,那麼在目標類的非抽象子類中建立必須的方法選項變為可選。當它選中時,目標類的所有子類,如果它們中沒有選中的方法,則會為它們建立選中的方法。
和在下推中一樣,選擇多個方法,點擊編輯按鈕,或者雙擊一個方法,都會開啟編輯成員對話方塊。其中有兩個選項,上移和在目標類中聲明抽象方法。上移只是簡單的複製方法到到父類中,並提供選擇是否在當前類中刪除該方法。在目標類中聲明抽象方法會在父類中建立一個選中方法的抽象方法,如果父類不是抽象類別則置為抽象類別,最後選中方法留在當前類中。和在下推中一樣,也可以點擊Action列,可以在出現的下拉式清單中選擇。
如果方法的Action列選為上移,在下一步的嚮導中,將會要求你選擇是否在當前類中刪除這些方法,選中的方法會在當前類中被刪除。
在嚮導的任意一步都可以按完成按鈕,結束重構作業,此時按照預設規則進行重構。
Extract Interface
提煉介面可以從一個存在的類中建立一個介面。你可以選擇在介面中包含著個類的那些方法。選中一個類,從重構菜單選擇提煉介面項,就可以開啟提煉介面對話方塊。
這此對話方塊中添入介面的名字,選擇希望包含的方法,在這個列表裡面只列出了公用方法。選中改變對類[當前類名]的應用為對介面的引用選擇框,將把所有對當前類的引用更新為對此介面的引用。
Generalize Type
泛化類型重構可以將一個聲明對象的類型改變為它的超類,選擇變數,參數,對象成員,方法傳回型別,然後選擇重構菜單的泛化類型項。在開啟的泛化類型對話方塊,選擇希望的新類型,然後點擊完成按鈕,結束重構。
Use Supertype Where Possible
使用超類會將對一個特定類型的引用改變為對它的超類的引用。選擇一個類,選中重構菜單的使用超類項,會開啟使用超類對話方塊。選中希望的超類類型,點擊完成按鈕完成重構。重構後,instanceof 運算式也會做相應的替換。
Inline
內聯是用代碼或值來取代調用方法的地方,靜態final對象成員,或局部變數。比如說,如果你內聯一個方法調用,這個調用的地方就會被替換為該方法體。要內聯一個方法,靜態final對象成員,局部變數,選中這些元素,在重構菜單中選擇內聯項,或者使用快速鍵Alt + Ctrl + I。在隨後開啟的內聯對話方塊,你可以選擇是否要內聯所有的調用,或者是選擇的調用。如果選擇所有調用,你還可以選擇是否刪除聲明本身。
Extract Method
如果方法中含有過多特定的操作,方法太長,或者其中的某段代碼被多次使用,這時,可以用提煉方法重構將這部分代碼提取到單獨的方法中。在Eclipse中應用此重構方便快捷。
選中要提煉的程式碼片段,從重構菜單中選擇提煉方法項,或者使用快速鍵Alt + Shift + M。
在提煉方法對話方塊中,輸入新方法的名字,選擇修飾詞,選擇是否讓新方法拋出運行時異常。在底部提供了新方法的預覽。
Extract Local Variable
使用一個變數來代替一個運算式有很多好處。如果運算式在多處被使用,這樣能夠提高效能,而且也提高了代碼的可讀性。要把一個運算式提煉為局部變數,選擇要提煉的運算式,從重構菜單中選擇提煉局部變數項,或者使用快速鍵Alt + Shift + L。
在提煉局部變數對話方塊中輸入新變數的名字,選擇是否要替換所有的運算式,是否使此變數為final。在對話方塊的底部提供變數的預覽。
Extract Constant
提煉常量與提煉局部變數很相似,唯一的區別是提煉常量重構可以選擇提煉出的常量的修飾詞,而且此常量將作為類的成員變數。
Introduce Parameter
介紹參數重構在方法中建立新的參數,然後用此新參數取代局部變數或者成員變數的執行個體。要是用此重構,選中方法中一個成員變數或局部變數的引用,然後從重構菜單中選擇介紹參數項。
Introduce Factory
工廠是用來建立新對象,返回新建立對象的方法。你可以選擇一個類的構造方法,從重構菜單中選擇介紹工廠項,應用此重構,為此類建立Factory 方法。
在介紹工廠對話方塊,輸入Factory 方法的名字和需要Factory 方法建立的對象的名字。選擇構造方法的修飾詞是否為私人。
點擊OK按鈕後,在指定的類中會出現此指定Factory 方法。此方法建立一個當前類的執行個體,然後返回此執行個體。
Convert Local Variable to Field
轉換局部變數為成員變數重構,將方法內的變數聲明移動到方法所在類中,使該變數對整個類可見。選擇一個局部變數,從重構菜單中選擇轉換局部變數為成員變數項,隨後開啟配置的對話方塊。
在此對話方塊中,添入成員變數的名字,選擇修飾詞,選擇在哪裡執行個體化此成員變數。隨後的聲明為靜態,聲明為final 選擇項是否可以使用,取決於執行個體化位置的選擇情況。
Encapsulate Field
要正確的實踐物件導向編程,應該將成員變數的修飾詞置為私人,提供相應的訪問器來訪問這些成員變數。但是這些操作很煩瑣。如果使用了封裝成員變數重構,則十分方便。選擇一個成員變數,從重構菜單中選擇封裝成員變數項。
在封裝局部變數對話方塊中,添入Getter, Setter方法的名字,選擇新方法在哪個方法後出現。選擇合適的修飾詞。應用了此重構會建立兩個新方法,將此成員變數的修飾詞置為私人,將對此成員變數的引用改變為對新方法的引用。
重構項列表:
下表從Eclipse協助中提取,列出了各種重構支援的Java資源類型,對應的快速鍵。
本文介紹了Eclipse提供的各種重構。這些重構便於使用,可以確保代碼重構更加方便安全。而且可以自動產生代碼以提高生產率。
某些重構改變了某些類的結構,但沒有改變項目中其他類的結構,如下推,上移重構。這時,就要確保項目中所有對改變元素的引用都要被更新。這也是為什麼要有一個好的測試套。同時,你也要更新測試套中的對改變元素的引用。所以說,重構和單元測試的有機結合對於軟體開發是多麼的重要 http://ldzyz007.iteye.com/blog/1157075
eclipse 重構(轉)