ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美在线中文字幕,国产精品毛片,玖玖视频精品http://www.aygfsteel.com/lijiajia418/category/14433.htmlVicent's blogzh-cnThu, 01 Mar 2007 15:36:36 GMTThu, 01 Mar 2007 15:36:36 GMT60区分eclipse中的两种JRE http://www.aygfsteel.com/lijiajia418/archive/2006/08/24/65540.htmlBinaryBinaryThu, 24 Aug 2006 07:54:00 GMThttp://www.aygfsteel.com/lijiajia418/archive/2006/08/24/65540.htmlhttp://www.aygfsteel.com/lijiajia418/comments/65540.htmlhttp://www.aygfsteel.com/lijiajia418/archive/2006/08/24/65540.html#Feedback0http://www.aygfsteel.com/lijiajia418/comments/commentRss/65540.htmlhttp://www.aygfsteel.com/lijiajia418/services/trackbacks/65540.html CowNew 开源团队网ç«?/span> www.cownew.com

论坛 http://www.cownew.com/newpeng/ (t¨©ng)

转蝲请保留此信息

今天一个CownewStudioçš„ä‹É用者通过QQ问我他的Eclipse安装CownewStudio以后在eclipse中可以看到studioåQŒä½†æ˜¯è¿è¡Œçš„æ—¶å€™æ½Cºç±»åŠ è²é”™è¯¯ã€‚å› ä¸ºCownewStudio目前的版本只支持JDK5åQŒæ‰€ä»¥æˆ‘询问他Eclipse使用的是不是1.4çš„JREåQŒä½†æ˜¯ä»–¼‹®è®¤å®ƒç”¨çš„å°±æ˜?.5çš„ã€?br />后来¾lè¿‡å®žéªŒåQŒæˆ‘¼‹®è®¤˜q˜æ˜¯JRE版本的问题,他就把他的Eclipse截图发给äº?ji¨£n)我åQŒä»¥è¯æ˜Žä»–用的是JDK1.5åQŒä½†æ˜¯æˆ‘发现他发˜q‡æ¥çš„图片工½E‹ç¼–译器配置对话框的。哈哈,我终于明白了(ji¨£n)åQŒè®©ä»–把Eclipse的配¾|®è¯¦¾l†ä¿¡æ¯ï¼ˆâ€œå¸®åŠ©â€?》“关于Eclipseâ€?》“配¾|®è¯¦¾l†ä¿¡æ¯â€ï¼‰(j¨ª)发过来,果然:
-vm
c:\programe\jdk1.4.2\jre\bin\javaw.exe

原来他装äº?ji¨£n)多个版本的JDK。我要他把JDK1.5目录下的JRE目录拯‚´åˆ°eclipse安装目录下,然后重启EclipseåQŒä¸€åˆ‡å·¥ä½œæ­£å¸æ€º†(ji¨£n)ã€?br />其实˜q™æ˜¯å¾ˆå¤šåˆšåˆšæŽ¥è§¦Eclipse、甚至用äº?ji¨£n)好长时间Eclipse的开发äh员经常犯的错åQŒä¹Ÿž®±æ˜¯æŠŠEclipse˜qè¡Œæ—¶çš„JRE与工作空间中™å¹ç›®æ‰€ç”¨çš„JREç‰ˆæœ¬å¼„æØœä¹±ã€?br />Eclipse也是一个普通的Java½E‹åºåQŒå› æ­¤å¿…™åÀLœ‰ä¸€ä¸ªJREåšäØ“(f¨´)˜qè¡ŒçŽ¯å¢ƒã€‚å¦‚æžœä½ çš„æœºå™¨ä¸Šæ²¡æœ‰å®‰è£…ä»ÖM½•JREåQˆæˆ–者JDKåQŒæœ¬æ–‡ä¸åšäºŒè€…的区分åQ‰ï¼Œé‚£ä¹ˆç‚¹å‡»eclipse.exež®×ƒ¼š(x¨¬)报错说找不到JRE。此时可以安装一个JRE、或者直接把JRE目录拯‚´åˆ°eclipse安装目录下ã€?br />在Eclipse的每个项目中可以为项目指定不同的JRE版本åQŒæ¯”如A™å¹ç›®ä½¿ç”¨JDK1.4¾~–译åQŒB™å¹ç›®ä½¿ç”¨JDK1.5¾~–译。这个JDK版本是和Eclipse˜qè¡ŒJRE没有直接关系的ã€?br />™å¹ç›®çš„JDK版本是很å®ÒŽ(gu¨©)˜“修改的,那么ä»ÖM½•指定Eclipse启动所用的JRE呢?
Eclipse启动的时候找JRE的顺序是åQšå¦‚æžœeclipse.ini中配¾|®äº†(ji¨£n)-vm参数åQŒé‚£ä¹ˆåˆ™ä½¿ç”¨˜q™ä¸ªå‚数指定的JREåQ›å¦åˆ™å°±åŽÀLŸ¥çœ‹eclipse安装目录下是否有JREæ–‡äšg夹,如果有的话就使用˜q™ä¸ªJREåQ›å¦åˆ™çš„话就åŽÈ³»¾lŸä¸­æŸ¥æ‰¾å®‰è£…çš„JREåQŒå¦‚果还找不到的话就报错ã€?br />所以如果不惛_¸è½½æŽ‰å…¶ä»–çš„JDK的话åQŒå¯ä»¥æœ‰ä¸¤ç§æ–¹å¼åQšï¼ˆ1åQ‰ç›´æŽ¥æŠŠè¦ä‹É用的JREæ–‡äšgå¤ÒŽ(gu¨©)‹·è´åˆ°Eclipse目录下,˜q™æ˜¯æ‡’äh常用的方法(2åQ‰ä¿®æ”¹eclipse.iniæ–‡äšgåQŒæ·»åŠ?vm参数åQŒæŒ‡å®šè¦˜qè¡Œçš„虚拟机的地址åQŒä‹Éç”?-vm 命ä×o(h¨´)行自变量例子åQ?vm c:\jre\bin\javaw.exe



]]>
利用Eclipse˜q›è¡Œé‡æž„(ä¸?http://www.aygfsteel.com/lijiajia418/archive/2006/08/24/65517.htmlBinaryBinaryThu, 24 Aug 2006 07:01:00 GMThttp://www.aygfsteel.com/lijiajia418/archive/2006/08/24/65517.htmlhttp://www.aygfsteel.com/lijiajia418/comments/65517.htmlhttp://www.aygfsteel.com/lijiajia418/archive/2006/08/24/65517.html#Feedback0http://www.aygfsteel.com/lijiajia418/comments/commentRss/65517.htmlhttp://www.aygfsteel.com/lijiajia418/services/trackbacks/65517.html Extract Method
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 如果æ–ÒŽ(gu¨©)³•中含有过多特定的操作åQŒæ–¹æ³•太长,或者其中的某段代码被多‹Æ¡ä‹É用,˜q™æ—¶åQŒå¯ä»¥ç”¨æç‚¼æ–ÒŽ(gu¨©)³•重构ž®†è¿™éƒ¨åˆ†ä»£ç æå–到单独的æ–ÒŽ(gu¨©)³•中。在Eclipse中应用此重构方便快捷ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 选中要提炼的代码ŒDµï¼Œä»?strong>重构菜单中选择提炼æ–ÒŽ(gu¨©)³•™å¹ï¼Œæˆ–者ä‹É用快捷键Alt + Shift + Mã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 在提炼方法对话框中,输入新方法的名字åQŒé€‰æ‹©ä¿®é¥°è¯ï¼Œé€‰æ‹©æ˜¯å¦è®©æ–°æ–ÒŽ(gu¨©)³•抛出˜qè¡Œæ—¶å¼‚常。在底部提供äº?ji¨£n)æ–°æ–Ò?gu¨©)³•的预览ã€?/div>
 (t¨©ng)
 (t¨©ng)
Extract Local Variable
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 使用一个变量来代替一个表辑ּæœ‰å¾ˆå¤šå¥½å¤„。如果表辑ּåœ¨å¤šå¤„被使用åQŒè¿™æ ¯‚ƒ½å¤Ÿæé«˜æ€§èƒ½åQŒè€Œä¸”也提高ä(sh¨´)º†(ji¨£n)代码的可è¯ÀL€§ã€‚要把一个表辑ּæç‚¼ä¸ºå±€éƒ¨å˜é‡ï¼Œé€‰æ‹©è¦æç‚¼çš„表达式,ä»?strong>重构菜单中选择提炼局部变é‡?/strong>™å¹ï¼Œæˆ–者ä‹É用快捷键Alt + Shift + Lã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 在提炼局部变量对话框中输入新变量的名字,选择是否要替换所有的表达式,是否使此变量为final。在对话框的底部提供变量的预览ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
Extract Constant
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 提炼帔R‡ä¸Žæç‚¼å±€éƒ¨å˜é‡å¾ˆç›æ€¼¼åQŒå”¯ä¸€çš„区别是提炼帔R‡é‡æž„可以选择提炼出的帔R‡çš„修饰词åQŒè€Œä¸”æ­¤å¸¸é‡å°†ä½œäØ“(f¨´)¾cÈš„æˆå‘˜å˜é‡ã€?/div>
 (t¨©ng)
Introduce Parameter
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 介绍参数重构在方法中创徏新的参数åQŒç„¶åŽç”¨æ­¤æ–°å‚数取代局部变量或者成员变量的实例。要是用此重构,选中æ–ÒŽ(gu¨©)³•中一个成员变量或局部变量的引用åQŒç„¶åŽä»Žé‡æž„菜单中选择介绍参数™åV€?/div>
 (t¨©ng)
 (t¨©ng)
Introduce Factory
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 工厂是用来创建新对象åQŒè¿”回新创徏对象的方法。你可以选择一个类的构造方法,ä»?strong>重构菜单中选择介绍工厂™å¹ï¼Œåº”用此重构,为此¾cÕdˆ›å»ºå·¥åŽ‚æ–¹æ³•ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
åœ?strong>介绍工厂对话框,输入工厂æ–ÒŽ(gu¨©)³•çš„åå­—å’Œéœ€è¦å·¥åŽ‚æ–¹æ³•åˆ›å»ºçš„å¯¹è±¡çš„åå­—ã€‚é€‰æ‹©æž„é€ æ–¹æ³•çš„ä¿®é¥°è¯æ˜¯å¦äØ“(f¨´)¿Uæœ‰ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 点击OK按钮后,在指定的¾cÖM¸­ä¼?x¨¬)出现此指定工厂æ–Ò?gu¨©)³•。此æ–ÒŽ(gu¨©)³•创徏一个当前类的实例,然后˜q”回此实例ã€?/div>
 (t¨©ng)
Convert Local Variable to Field
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) è½¬æ¢å±€éƒ¨å˜é‡äØ“(f¨´)成员变量重构åQŒå°†æ–ÒŽ(gu¨©)³•内的变量声明¿UÕdŠ¨åˆ°æ–¹æ³•æ‰€åœ¨ç±»ä¸­ï¼Œä½¿è¯¥å˜é‡å¯ÒŽ(gu¨©)•´ä¸ªç±»å¯è§ã€‚选择一个局部变量,ä»?strong>é‡æž„èœå•ä¸­é€‰æ‹©è½¬æ¢å±€éƒ¨å˜é‡äØ“(f¨´)成员变量™å¹ï¼ŒéšåŽæ‰“开配置的对话框ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 在此对话框中åQŒæ·»å…¥æˆå‘˜å˜é‡çš„名字åQŒé€‰æ‹©ä¿®é¥°è¯ï¼Œé€‰æ‹©åœ¨å“ªé‡Œå®žä¾‹åŒ–此成员变量。随后的声明为静(r¨´n)æ€?/strong>åQ?strong>声明ä¸?/strong>final 选择™åÒŽ(gu¨©)˜¯å¦å¯ä»¥ä‹É用,取决于实例化位置的选择情况ã€?/div>
 (t¨©ng)
Encapsulate Field
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 要正¼‹®çš„实践面向对象¾~–程åQŒåº”该将成员变量的修饰词¾|®äØ“(f¨´)¿Uæœ‰åQŒæä¾›ç›¸åº”的讉K—®å™¨æ¥è®‰K—®˜q™äº›æˆå‘˜å˜é‡ã€‚但是这些操作很çƒ?ch¨³)琐。如果ä‹É用了(ji¨£n)ž®è£…成员变量重构åQŒåˆ™ååˆ†æ–¹ä¾¿ã€‚选择一个成员变量,ä»?strong>重构菜单中选择ž®è£…成员变量™åV€?/div>
 (t¨©ng)
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 在封装局部变量对话框中,æ·Õd…¥Getter, Setteræ–ÒŽ(gu¨©)³•的名字,选择新方法在哪个æ–ÒŽ(gu¨©)³•后出现。选择合适的修饰词。应用了(ji¨£n)此重构会(x¨¬)创徏两个新方法,ž®†æ­¤æˆå‘˜å˜é‡çš„修饰词¾|®äØ“(f¨´)¿Uæœ‰åQŒå°†å¯ÒŽ(gu¨©)­¤æˆå‘˜å˜é‡çš„引用改变ä(sh¨´)Ø“(f¨´)å¯ÒŽ(gu¨©)–°æ–ÒŽ(gu¨©)³•的引用ã€?/div>
 (t¨©ng)
重构™å¹åˆ—表:(x¨¬)
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 下表从Eclipse帮助中提取,列出äº?ji¨£n)各¿Ué‡æž„支持的Java资源¾cÕdž‹åQŒå¯¹åº”的快捷键ã€?/div>
 (t¨©ng)

名字
可应用的Java元素
快捷�/div>
Undo
在一‹Æ¡é‡æž„后可执è¡?/div>
Alt + Shift + Z
Redo
在一‹Æ¡æ’¤é”€é‡æž„后可执行
Alt + Shift + Y
Rename
å¯ÒŽ(gu¨©)–¹æ³•,成员变量åQŒå±€éƒ¨å˜é‡ï¼Œæ–ÒŽ(gu¨©)³•参数åQŒå¯¹è±¡ï¼Œ¾c»ï¼ŒåŒ…,源代码目录,工程可用ã€?/div>
Alt + Shift + R
Move
å¯ÒŽ(gu¨©)–¹æ³•,成员变量åQŒå±€éƒ¨å˜é‡ï¼Œæ–ÒŽ(gu¨©)³•参数åQŒå¯¹è±¡ï¼Œ¾c»ï¼ŒåŒ…,源代码目录,工程可用ã€?/div>
Alt + Shift + V
Change Method Signature
å¯ÒŽ(gu¨©)–¹æ³•可用ã€?/div>
Alt + Shift + C
Convert Anonymous Class to Nested
对匿名内部类可用�/div>
 (t¨©ng)
Move Member Type to New File
对嵌套类可用�/div>
 (t¨©ng)
Push Down
对同一个类中成员变量和æ–ÒŽ(gu¨©)³•可用ã€?/div>
 (t¨©ng)
Pull Up
对同一个类中成员变量和æ–ÒŽ(gu¨©)³•åQŒåµŒå¥—类可用ã€?/div>
 (t¨©ng)
Extract Interface
对类可用�/div>
 (t¨©ng)
Generalize Type
对对象的声明可用�/div>
 (t¨©ng)
Use Supertype Where Possible
对类可用�/div>
 (t¨©ng)
Inline
å¯ÒŽ(gu¨©)–¹æ³•,é?r¨´n)态final¾c»ï¼Œå±€éƒ¨å˜é‡å¯ç”¨ã€?/div>
Alt + Shift + I
 (t¨©ng)
Extract Method
å¯ÒŽ(gu¨©)–¹æ³•中的一ŒDµä»£ç å¯ç”¨ã€?/div>
Alt + Shift + M
 (t¨©ng)
Extract Local Variable
寚w€‰ä¸­çš„与局部变量相关的代码可用ã€?/div>
Alt + Shift + L
 (t¨©ng)
Extract Constant
寚w™(r¨´n)态final¾cÕd˜é‡ï¼Œé€‰ä¸­çš„与é?r¨´n)态final¾cÕd˜é‡ç›¸å…³çš„代码可用ã€?/div>
 (t¨©ng)
Introduce Parameter
å¯ÒŽ(gu¨©)–¹æ³•中å¯ÒŽ(gu¨©)ˆå‘˜å˜é‡å’Œå±€éƒ¨å˜é‡çš„引用可用ã€?/div>
 (t¨©ng)
Introduce Factory
å¯ÒŽ(gu¨©)ž„造方法可用ã€?/div>
 (t¨©ng)
Convert Local Variable to Field
对局部变量可用�/div>
Alt + Shift + F
Encapsulate Field
å¯ÒŽ(gu¨©)ˆå‘˜å˜é‡å¯ç”¨ã€?/div>
 (t¨©ng)
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 本文介绍äº?ji¨£n)Eclipse提供的各¿Ué‡æž„。这些重构易于ä‹É用,可以¼‹®ä¿ä»£ç é‡æž„更加方便安全。而且可以自动生成代码以提高生产率ã€?/div>

 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 某些重构改变?sh¨´)º†(ji¨£n)某些类的结构,但没有改变项目中其他¾cȝš„¾l“æž„åQŒå¦‚下推åQŒä¸Š¿U»é‡æž„。这æ—Óž¼Œž®Þp¦¼‹®ä¿?r¨´n)å¹ç›®ä¸­æ‰€æœ‰å¯¹æ”¹å˜å…ƒç´ çš„引用都要被更新。这也是ä¸ÞZ»€ä¹ˆè¦æœ‰ä¸€ä¸ªå¥½çš„æµ‹è¯•套。同æ—Óž¼Œä½ ä¹Ÿè¦æ›´æ–°æµ‹è¯•套中的å¯ÒŽ(gu¨©)”¹å˜å…ƒç´ çš„引用。所以说åQŒé‡æž„和单元‹¹‹è¯•的有机结合对于èÊY件开发是多么的重要ã€?/span>



]]>利用Eclipse˜q›è¡Œé‡æž„åQˆä¸Š)http://www.aygfsteel.com/lijiajia418/archive/2006/08/24/65516.htmlBinaryBinaryThu, 24 Aug 2006 07:00:00 GMThttp://www.aygfsteel.com/lijiajia418/archive/2006/08/24/65516.htmlhttp://www.aygfsteel.com/lijiajia418/comments/65516.htmlhttp://www.aygfsteel.com/lijiajia418/archive/2006/08/24/65516.html#Feedback0http://www.aygfsteel.com/lijiajia418/comments/commentRss/65516.htmlhttp://www.aygfsteel.com/lijiajia418/services/trackbacks/65516.html重构和单元测试是½E‹åºå‘˜çš„两大法宝åQŒä»–们的作用ž®±åƒ½Iºæ°”和水对于äºÞZ¸€æ øP¼Œòq›_‡¡åQŒä¸èµïL(f¨¥ng)œ¼åQŒä½†æ˜¯æ„ä¹‰æ·±é‡ã€‚预善事åQŒå¿…先利器,本文ž®×ƒ»‹¾læ€Žæ ·åœ¨Eclipse中进行重构ã€?/div>
 (t¨©ng)
本文介绍äº?ji¨£n)Eclipse支持的重构种¾c»ï¼Œå®ƒä»¬çš„含义,以及(qi¨¢ng)æ€Žæ ·é‡æž„ã€‚æœ¬æ–‡åŒæ—¶ä¹Ÿå¯ä»¥ä½œäØ“(f¨´)学习(f¨¤n)重构知识的快速手册ã€?/div>
 (t¨©ng)
什么是重构
重构是指在保持程序的全部功能的基¼‹€ä¸Šæ”¹å˜ç¨‹åºç»“构的˜q‡ç¨‹ã€‚重构的¾cÕdž‹æœ‰å¾ˆå¤šï¼Œå¦‚更改类名,改变æ–ÒŽ(gu¨©)³•名,或者提取代码到æ–ÒŽ(gu¨©)³•中。每一‹Æ¡é‡æž„,都要执行一¾pÕdˆ—的步骤,˜q™äº›æ­¥éª¤è¦ä¿è¯ä»£ç å’ŒåŽŸä»£ç ç›¸ä¸€è‡´ã€?/div>
 (t¨©ng)
ä¸ÞZ»€ä¹ˆé‡æž„很重要 (t¨©ng) (t¨©ng) (t¨©ng)
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 手工重构æ—Óž¼Œå¾ˆå®¹æ˜“在代码中引入错误,例如拼写错误或者漏掉了(ji¨£n)é‡æž„çš„æŸä¸€æ­¥ã€‚äØ“(f¨´)äº?ji¨£n)防止引入错误,在每‹Æ¡é‡æž„前后,都要执行充分的测试。你可能ä¼?x¨¬)好奇重构是否是值得的ã€?/div>
重构的理由很多。你可能惌™¦æ›´æ–°ä¸€ŒDµä»£ç å¾ˆçƒ‚çš„½E‹åºã€‚或者最初的设计队伍都不在了(ji¨£n)åQŒçŽ°åœ¨é˜Ÿä¼ä¸­æ¯ähäº?ji¨£n)è§£˜q™äº›½E‹åºã€‚䨓(f¨´)äº?ji¨£n)更斎ͼŒä½ å¿…™å»è¦é‡æ–°è®¾è®¡æž„徏½E‹åºæ¥æ»¡­‘³ä½ çš„需求。另一个原因是原来的设计无法ä‹É你将新的ç‰ÒŽ(gu¨©)€§æ·»åŠ è¿›åŽ…R€‚䨓(f¨´)äº?ji¨£n)添加进去,你要重构˜q™äº›ä»£ç ã€‚第三个原因是一个自动重构的工具可以ä¸ÞZ½ è‡ªåŠ¨ç”Ÿæˆä»£ç åQŒä¾‹å¦‚Eclipse中的重构功能。ä‹É用重构,你可以在重写ž®½é‡ž®‘的代码和仍保持软äšg功能的同æ—Óž¼Œä½¿ä»£ç çš„逻辑性更好ã€?/div>
 (t¨©ng)
 (t¨©ng)
‹¹‹è¯•
在重构时åQŒæµ‹è¯•是十分重要的。应为重构改变ä(sh¨´)º†(ji¨£n)代码的结构,你要保证重构后代码的功能没有被改变。手工重构时åQŒä¸€ä¸ªå¥½çš„æµ‹è¯•套是必™åȝš„。ä‹É用自动重构工å…äh˜¯åQŒæµ‹è¯•也是必要的åQŒä½†ä¸éœ€è¦å¾ˆé¢‘繁åQŒåº”䏸™‡ªåŠ¨é‡æž„å·¥å…·ä¸ä¼?x¨¬)äñ”生手工重构时的那些错误,如拼写错误ã€?/div>
在Eclipse中可以ä‹É用JUnitæ–¹ä¾¿çš„äØ“(f¨´)½E‹åºåˆ›å¾‹¹‹è¯•代码åQŒå…·ä½“方法不在本文描˜q°ã€?/div>
 (t¨©ng)
 (t¨©ng)
Eclipse中的重构
JDTåQŒEclipse中的Java插äšgåQŒèƒ½å¤Ÿå¯¹Java™å¹ç›®åQŒç±»åQŒæˆ–成员˜q›è¡Œå¤šç§¾cÕdž‹çš„自动重构。可以采取多¿Uæ–¹æ³•快速的为Java™å¹ç›®ä¸­çš„æŸä¸ªå…ƒç´ ˜q›è¡Œé‡æž„ã€?/div>
为某些元素进行重构的前提是你必须选中他们。你可以在多个视图中选择˜q™äº›å…ƒç´ åQŒåƒå¤§çº²è§†å›¾æˆ–包‹¹è§ˆè§†å›¾ã€‚可以按住Ctrl或Shift键,在视图中选择多个元素。另外一¿Ué€‰æ‹©çš„æ–¹æ³•是使该元素的编辑区高ä(sh¨´)º®æ˜„¡¤ºåQŒæˆ–者把鼠标定位到源½E‹åºæ–‡äšg。在选中希望重构的元素后åQŒå¯ä»¥ä»Žé‡æž„菜单的下拉项选择重构åQŒä¹Ÿå¯ä»¥ä»Žå³é”®å•å‡ÕdŽå¼¹å‡ºèœå•中选择重构子菜单。同æ—Óž¼ŒEclipse˜q˜æä¾›äº†(ji¨£n)重构的快捷键操作ã€?/div>
某些重构可以应用在ä“Q意元素上åQŒæœ‰äº›åˆ™åªèƒ½ç”¨åœ¨ç‰¹å®š¾cÕdž‹çš„元素上åQŒå¦‚¾cÀLˆ–æ–ÒŽ(gu¨©)³•。在本文的最后的表格中,列出äº?ji¨£n)重构能够应用的元素¾cÕdž‹åQŒä»¥å?qi¨¢ng)重构的快捷键ã€?/div>
在Eclipse中,所有的重构都能够在正式执行之前预览一下。在重构对话框中点击“预览”按钮,可以查看所有将要被改变的地斏V€‚唯一没有预览按钮的的重构是Pull UpåQŒåœ¨å®ƒçš„重构向导中,到最后,预览面板æ€ÖM¼š(x¨¬)出现。可以将其中的个别变化反选掉åQŒè¿™æ ¯‚¿™äº›æ”¹å˜å°±ä¸ä¼š(x¨¬)生效ã€?/div>
 (t¨©ng)
 (t¨©ng)
撤销和重�/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 在重构菜单中有撤销和重做项。他们和¾~–辑菜单中的撤销重做不同。即佉K‡æž„改变ä(sh¨´)º†(ji¨£n)很多文äšgåQŒç¼–辑菜单中的撤销重做只会(x¨¬)更改当前文äšg。重构菜单中的撤销和重做则ä¼?x¨¬)对一‹Æ¡é‡æž„的所有文件进行撤销和重做操作。但是在使用æ—Óž¼Œå®ƒä»¬æœ‰ä¸€å®šçš„限制ã€?/div>
重构后,无论重构改变?sh¨´)º†(ji¨£n)文件与否,如果ä»ÖM¸€ä¸ªæ–‡ä»¶è¢«å¦å¤–改变而且保存?sh¨´)º†(ji¨£n),你就无法撤销或重做这个重构。假如一个文件在重构中被修改äº?ji¨£n),然后又被¾~–辑äº?ji¨£n),但是˜q˜æ²¡æœ‰ä¿å­˜ï¼Œ˜q™æ—¶ž®×ƒ¼š(x¨¬)有错误信息提½Cºï¼Œå¦‚果你想要撤销或重做该重构åQŒå¿…™åÀL’¤é”€æœªä¿å­˜çš„æ–‡äšgã€?/div>
只要注意åˆîC»¥ä¸Šçš„限制条äšgåQŒä½ ž®±å¯ä»¥éšå¿?j¨©)所‹Æ²çš„寚w‡æž„进行撤销或重做。你甚至能够¾~–译åQŒè¿è¡Œä½ çš„ç¨‹åºæµ‹è¯•ä¸€ä¸‹ï¼Œç„¶åŽå†æ’¤é”€è¯¥é‡æž„ï¼Œåªè¦ä½ æ²¡æœ‰æ”¹å˜åÆˆä¿å­˜?sh¨´)»ÖM½•æ–‡äšgã€?/div>
 (t¨©ng)
Eclipse中的重构¾cÕdž‹
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 如果你看一下Eclipse的重构菜单,可以看到四部分。第一部分是撤销和重做。其他的三部分包含Eclipse提供的三¿Uç±»åž‹çš„重构ã€?/div>
½W¬ä¸€¿Uç±»åž‹çš„重构改变?sh¨´)»£ç çš„物理结构,像Renameå’ŒMove。第二种是在¾cÕd±‚‹Æ¡ä¸Šæ”¹å˜?sh¨´)»£ç ¾l“æž„åQŒä¾‹å¦‚Pull Upå’ŒPush Down。第三种是改变类内部的代码,像Extract Methodå’ŒEncapsulate Field。这三部分的重构列表如下ã€?/div>
 (t¨©ng)
¾cÕdž‹1 物理¾l“æž„
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Rename
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Move
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Change Method signature
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Convert Anonymous Class to Nested
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Convert Member Type to New File
 (t¨©ng)
¾cÕdž‹2 ¾cÕd±‚‹Æ¡ç»“æž?/div>
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Push Down
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Push Up
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Extract Interface
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Generalize Type (Eclipse 3)
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) User Supertype Where Possible
¾cÕdž‹3 ¾cÕd†…部结æž?/div>
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Inline
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Extract Method
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Extract Local Variable
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Extract Constant
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Introduce Parameter
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Introduce Factory
l (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Encapsulate Field
 (t¨©ng)
 (t¨©ng)
 (t¨©ng)
Rename:
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Rename用来改变?sh¨´)¸€ä¸ªJava元素的名字。虽然你可以手工改变Javaæ–‡äšgJava元素的名字,但是˜q™æ ·ä¸èƒ½è‡ªåŠ¨æ›´æ–°æ‰€æœ‰å¼•ç”¨å®ƒä»¬çš„æ–‡äšg或Java元素。你必须在项目中搜烦(ch¨³)æ–‡äšg然后手工替换˜q™äº›å¼•用。很可能你就ä¼?x¨¬)漏掉一个或者改错一个。Rename 重构ä¼?x¨¬)智能的更新所有有此引用的地方ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 有时候,Java元素的名字不是很明了(ji¨£n)åQŒæˆ–者它的功能已¾læ”¹å˜ä(sh¨´)º†(ji¨£n)ã€‚äØ“(f¨´)äº?ji¨£n)保持代码的可读性,该元素的名字也要更新。ä‹É用Rename重构åQŒèƒ½å¤Ÿååˆ†å¿«æïL(f¨¥ng)š„æ›´æ–°å…ƒç´ çš„名字和所有引用它的地斏V€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) è¦äØ“(f¨´)一个Java元素改名åQŒåœ¨åŒ…浏览视图或大纲视图选中该元素,从重构菜单中选择Rename™å¹ï¼Œæˆ–者ä‹É用快捷键Alt+Shift+R。Rename对话框会(x¨¬)出现。在˜q™é‡Œæ·Õd…¥æ–°çš„名字åQŒé€‰æ‹©æ˜¯å¦æ›´æ–°è¯¥å…ƒç´ çš„引用。点击预览按钮,ä¼?x¨¬)打开预览½H—口åQŒåœ¨˜q™é‡ŒåQŒä½ å¯ä»¥çœ‹åˆ°é‚£äº›å†…容ä¼?x¨¬)被改变。点击OK按钮åQŒé‡æž„结束ã€?/div>
 (t¨©ng)
Move
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) Moveå’ŒRename很相伹{€‚它用来把元素从一个位¾|®ç§»åŠ¨åˆ°å¦ä¸€ä¸ªä½¾|®ã€‚它主要用来ž®†ç±»ä»Žä¸€ä¸ªåŒ…¿UÕdŠ¨åˆ°å¦ä¸€ä¸ªåŒ…ã€‚é€‰ä¸­è¦ç§»åŠ¨çš„å…ƒç´ åQŒä»Žé‡æž„菜单中选择Move,或者ä‹É用快捷键åQŒAlt+Shift+V,在弹出窗口中选择要移动的目的地。你仍然可以用预览功能检查一下有什么改变,也可以按OK按钮直接让其生效ã€?/div>
 (t¨©ng)
 (t¨©ng)
Change Method Signature
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 更改æ–ÒŽ(gu¨©)³•½{‘֐èƒ½å¤Ÿæ”¹å˜å‚数名,参数¾cÕdž‹åQŒå‚数顺序,˜q”回¾cÕdž‹åQŒä»¥å?qi¨¢ng)方法的可见性。也可以æ·ÕdŠ åQŒåˆ é™¤å‚æ•°ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 要执行此重构åQŒé€‰æ‹©è¦é‡æž„çš„æ–ÒŽ(gu¨©)³•åQŒé€‰ä¸­é‡æž„菜单的更æ”ÒŽ(gu¨©)–¹æ³•签名项åQŒä¼š(x¨¬)出现更改æ–ÒŽ(gu¨©)³•½{‘֐å¯¹è¯æ¡†ã€?/div>
 (t¨©ng)
在此对话框中选择æ–ÒŽ(gu¨©)³•的修饰词åQŒè¿”回类型,参数。参数的æ·ÕdŠ åQŒä¿®æ”¹ï¼Œ¿UÕdЍåQŒåˆ é™¤å¯ä»¥é€šè¿‡åŒ™¾¹çš„æŒ‰é’®æŽ§åˆ¶ã€‚当æ·ÕdŠ æ–°çš„å‚æ•°æ—Óž¼Œä¼?x¨¬)自动赋予默认倹{€‚凡是调用此æ–ÒŽ(gu¨©)³•的地斚wƒ½ä¼?x¨¬)用此默认å€ég½œä¸ºå‚数输入ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 改变æ–ÒŽ(gu¨©)³•½{‘֐å¯èƒ½åœ¨æ–¹æ³•䏭坯D‡´é—®é¢˜åQŒå¦‚果有问题åQŒå½“你点击预览或OKæ—Óž¼Œä¼?x¨¬)被标记出来ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
 (t¨©ng)
Move Members Type to New File
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 此重构将嵌套¾c»è{ä¸ÞZ¸€ä¸ªå•独类。将ä¼?x¨¬)创å»ÞZ¸€ä¸ªæ–°çš„Javaæ–‡äšg包含此嵌套类。选中要重构的¾c»ï¼Œåœ¨é‡æž„菜单上选择Move Member Type to New File™å¹ï¼Œåœ¨å¼¹å‡ºçš„对话框中æ·Õd…¥è¦åˆ›å»ºçš„实例的名字ã€?/span>
 (t¨©ng)
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
 (t¨©ng)
Push Down
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 此重构将½Ž—中的方法和成员?sh¨´)»Žçˆ¶¾cÖM¸­¿UÕdŠ¨åˆ°å®ƒçš„ç›´æŽ¥å­¾cÖM¸­åQŒæ‰€æœ‰ä¸‹æŽ¨çš„æ–ÒŽ(gu¨©)³•都可选作ä¸ÞZ¸€ä¸ªæŠ½è±¡æ–¹æ³•留在父¾cÖM¸­ã€‚下推重构对于重新构建项目设计十分有用ã€?/span>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 选择若干æ–ÒŽ(gu¨©)³•或成员,从重构菜单中选择下推™å¹ï¼Œå¼¹å‡ºä¸‹æŽ¨å¯¹è¯æ¡†ã€?/span>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 在此对话框中åQŒå¯ä»¥åˆ†åˆ«é€‰æ‹©æ–ÒŽ(gu¨©)³•或成员,所有选中元素都会(x¨¬)¿UÕdŠ¨åˆ°å½“å‰ç±»çš„å­¾cÖM¸­ã€‚当点击Add Required按钮æ—Óž¼Œæ‰€æœ‰å·²é€‰æ‹©å…ƒç´ æ‰€å¿…需的元素也ä¼?x¨¬)自动选上åQŒæ­¤è¡ŒäØ“(f¨´)òq¶ä¸èƒ½ä¿è¯æ‰€æœ‰å¿…™åȝš„元素都能自动选中åQŒè¿˜æ˜¯éœ€è¦äh工确认。当有方法被选中æ—Óž¼Œ¾~–辑按钮ž®×ƒ¼š(x¨¬)可用åQŒç‚¹å‡È¼–辑按钮,弹出¾~–辑对话框。在其中可以选择为选中æ–ÒŽ(gu¨©)³•在当前类中遗留抽象方法,˜q˜æ˜¯åœ¨å½“前类中删除这些方法。双å‡ÖM¸€å¤©é€‰ä¸­çš„æ–¹æ³•,也可以打开¾~–辑对话框。在æ–ÒŽ(gu¨©)³•çš„Action列点击,ä¼?x¨¬)出çŽîC¸€ä¸ªä¸‹æ‹‰åˆ—表,可以在其中选择遗留抽象æ–ÒŽ(gu¨©)³•˜q˜æ˜¯åœ¨å½“前类中删除方法。按回èžR键确认编辑结果ã€?/div>
 (t¨©ng)
 (t¨©ng)
Pull Up
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 上移与下推类ä¼û|¼Œä¹Ÿæ˜¯åœ¨ç±»ä¹‹é—´¿UÕdЍæ–ÒŽ(gu¨©)³•和成员。上¿UÕd°†æ–ÒŽ(gu¨©)³•或成员ä(sh¨´)»Žä¸€ä¸ªç±»¿UÕdŠ¨åˆ°å®ƒçš„ä¸€ä¸ªçˆ¶¾cÖM¸­ã€‚选中若干个方法或成员åQŒåœ¨é‡æž„菜单中选择上移™å¹ï¼Œä¸Šç§»å‘导马上ä¼?x¨¬)出现ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 在选择目标¾cÕd¤šé€‰æ¡†ä¸­ï¼Œåˆ—出äº?ji¨£n)当前类¾l§æ‰¿çš„æ‰€æœ‰çˆ¶¾c…R€‚你只能ž®†æ–¹æ³•或成员¿UÕdŠ¨åˆ°å®ƒä»¬å…¶ä¸­çš„ä¸€ä¸ªé‡Œé¢ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 如果在选中æ–ÒŽ(gu¨©)³•çš„Action列,被设¾|®æˆåœ¨ç›®æ ‡ç±»ä¸­å£°æ˜ŽæŠ½è±¡æ–¹æ³•,那么在目标类的非抽象子类中创建必™åÈš„æ–ÒŽ(gu¨©)³•选项变ä(sh¨´)Ø“(f¨´)可选。当它选中æ—Óž¼Œç›®æ ‡¾cÈš„æ‰€æœ‰å­¾c»ï¼Œå¦‚果它们中没有选中的方法,则会(x¨¬)为它们创建选中的方法ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) å’Œåœ¨ä¸‹æŽ¨ä¸­ä¸€æ øP¼Œé€‰æ‹©å¤šä¸ªæ–ÒŽ(gu¨©)³•åQŒç‚¹å‡È¼–辑按钮,或者双å‡ÖM¸€ä¸ªæ–¹æ³•,都会(x¨¬)打开¾~–辑成员对话框。其中有两个选项åQŒä¸Š¿UÕd’Œåœ¨ç›®æ ‡ç±»ä¸­å£°æ˜ŽæŠ½è±¡æ–¹æ³•。上¿UÕdªæ˜¯ç®€å•的复制æ–ÒŽ(gu¨©)³•到到父类中,òq¶æä¾›é€‰æ‹©æ˜¯å¦åœ¨å½“前类中删除该æ–ÒŽ(gu¨©)³•。在目标¾cÖM¸­å£°æ˜ŽæŠ½è±¡æ–ÒŽ(gu¨©)³•ä¼?x¨¬)在父类中创å»ÞZ¸€ä¸ªé€‰ä¸­æ–ÒŽ(gu¨©)³•的抽象方法,如果父类不是抽象¾cÕdˆ™¾|®äØ“(f¨´)抽象¾c»ï¼Œæœ€åŽé€‰ä¸­æ–ÒŽ(gu¨©)³•留在当前¾cÖM¸­ã€‚å’Œåœ¨ä¸‹æŽ¨ä¸­ä¸€æ øP¼Œä¹Ÿå¯ä»¥ç‚¹å‡»Action列,可以在出现的下拉列表中选择ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 如果æ–ÒŽ(gu¨©)³•çš„Actionåˆ—é€‰äØ“(f¨´)上移åQŒåœ¨ä¸‹ä¸€æ­¥çš„向导中,ž®†ä¼š(x¨¬)要求你选择是否在当前类中删除这些方法,选中的方法会(x¨¬)在当前类中被删除ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 在向导的ä»ÀL„ä¸€æ­¥éƒ½å¯ä»¥æŒ‰å®ŒæˆæŒ‰é’®ï¼Œ¾l“束重构操作åQŒæ­¤æ—¶æŒ‰ç…§é»˜è®¤è§„则进行重构ã€?/div>
 (t¨©ng)
 (t¨©ng)
Extract Interface
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 提炼接口可以从一个存在的¾cÖM¸­åˆ›å¾ä¸€ä¸ªæŽ¥å£ã€‚你可以选择在接口中包含着个类的那些方法。选中一个类åQŒä»Žé‡æž„菜单选择提炼接口™å¹ï¼Œž®±å¯ä»¥æ‰“开提炼接口对话框ã€?/div>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ˜q™æ­¤å¯¹è¯æ¡†ä¸­æ·Õd…¥æŽ¥å£çš„名字,选择希望包含的方法,在这个列表里面只列出äº?ji¨£n)公共方法。选中改变对类[当前¾cÕd]çš„åº”ç”¨äØ“(f¨´)å¯ÒŽ(gu¨©)Ž¥å£çš„å¼•ç”¨é€‰æ‹©æ¡†ï¼Œž®†æŠŠæ‰€æœ‰å¯¹å½“前¾cȝš„引用更新为对此接口的引用ã€?/div>
 (t¨©ng)
 (t¨©ng)
Generalize Type
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 泛化¾cÕdž‹é‡æž„可以ž®†ä¸€ä¸ªå£°æ˜Žå¯¹è±¡çš„¾cÕdž‹æ”¹å˜?sh¨´)¸ºå®ƒçš„è¶…¾c»ï¼Œé€‰æ‹©å˜é‡åQŒå‚敎ͼŒå¯¹è±¡æˆå‘˜åQŒæ–¹æ³•返回类型,然后选择重构菜单的泛化类型项。在打开的泛化类型对话框åQŒé€‰æ‹©å¸Œæœ›çš„æ–°¾cÕdž‹åQŒç„¶åŽç‚¹å‡Õd®ŒæˆæŒ‰é’®ï¼Œ¾l“束重构ã€?/div>
 (t¨©ng)
 (t¨©ng)
Use Supertype Where Possible
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 使用­‘…ç±»ä¼?x¨¬)将对一个特定类型的引用改变?sh¨´)¸ºå¯¹å®ƒçš„­‘…类的引用。选择一个类åQŒé€‰ä¸­é‡æž„菜单的ä‹É用超¾c»é¡¹åQŒä¼š(x¨¬)打开使用­‘…类对话框。选中希望的超¾cȝ±»åž‹ï¼Œç‚¹å‡»å®ŒæˆæŒ‰é’®å®Œæˆé‡æž„。重构后åQŒinstanceof 表达式也ä¼?x¨¬)做相应的替换ã€?/div>
 (t¨©ng)
 (t¨©ng)
 (t¨©ng)
Inline
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 内联是用代码或值来取代调用æ–ÒŽ(gu¨©)³•的地方,é?r¨´n)态final对象成员åQŒæˆ–局部变量。比如说åQŒå¦‚果你内联一个方法调用,˜q™ä¸ªè°ƒç”¨çš„地方就ä¼?x¨¬)è¢«æ›¿æ¢ä¸ø™¯¥æ–Ò?gu¨©)³•体。要内联一个方法,é?r¨´n)态final对象成员åQŒå±€éƒ¨å˜é‡ï¼Œé€‰ä¸­˜q™äº›å…ƒç´ åQŒåœ¨é‡æž„菜单中选择内联™å¹ï¼Œæˆ–者ä‹É用快捷键Alt + Ctrl + I。在随后打开的内联对话框åQŒä½ å¯ä»¥é€‰æ‹©æ˜¯å¦è¦å†…联所有的调用åQŒæˆ–者是选择的调用。如果选择所有调用,你还可以选择是否删除声明本èínã€?/div>

]]> Ö÷Õ¾Ö©Öë³ØÄ£°å£º ËçÖÐÏØ| аͶû»¢ÓÒÆì| ·öËçÏØ| ²´Í·ÊÐ| Âò³µ| ¹ÅÝþÏØ| ÖÐÑôÏØ| а²ÏØ| ¹ã×ÚÏØ| Î÷»ªÏØ| ÔÆÄÏÊ¡| ¿â¶ûÀÕÊÐ| °²¸£ÏØ| ƽ½­ÏØ| ·ïÉ½ÏØ| ÔúÄÒÏØ| ·î½ÚÏØ| ¸ÊËàÊ¡| ÁùÅÌË®ÊÐ| ÖÐÎ÷Çø| ËÄ´¨Ê¡| ӥ̶ÊÐ| ÏçÄþÏØ| кÍÏØ| Ïå·®ÊÐ| ͨºÓÏØ| ÎÂËÞÏØ| î¡ÄþÏØ| ÏéÔÆÏØ| ³¤º£ÏØ| ³»ÖÝÊÐ| ¾°Ì©ÏØ| ÐìÎÅÏØ| ÕÑËÕÏØ| ÏÉÓÎÏØ| ÒËÕÂÏØ| ͨº£ÏØ| Çຣʡ| Íû¿üÏØ| ÐË»¯ÊÐ| Îå³£ÊÐ|