ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>中文在线三区,毛片在线能看,欧美午夜黄色http://www.aygfsteel.com/apple0668/category/25898.htmlTDD,Agile,Scrum,Core Java,J2EE,Investment Blankzh-cnSat, 28 Apr 2012 16:58:06 GMTSat, 28 Apr 2012 16:58:06 GMT60ä»ÖM½•人都å¯ä»¥é‡æž„<转è²>http://www.aygfsteel.com/apple0668/archive/2012/04/28/376978.htmlapple0668apple0668Sat, 28 Apr 2012 07:56:00 GMThttp://www.aygfsteel.com/apple0668/archive/2012/04/28/376978.htmlhttp://www.aygfsteel.com/apple0668/comments/376978.htmlhttp://www.aygfsteel.com/apple0668/archive/2012/04/28/376978.html#Feedback0http://www.aygfsteel.com/apple0668/comments/commentRss/376978.htmlhttp://www.aygfsteel.com/apple0668/services/trackbacks/376978.html原文åQ?a >https://www.ibm.com/developerworks/cn/linux/opensource/os-ecref/
ä¸ÞZ»€ä¹ˆé‡æž?

釿ž„æ˜¯æŒ‡åœ¨ä¸æ”¹å˜½E‹åºåŠŸèƒ½çš„å‰æä¸‹æ”¹å˜å…¶ç»“æž„ã€‚é‡æž„是一™å¹åŠŸèƒ½å¼ºå¤§çš„æŠ€æœ¯ï¼Œä½†æ˜¯æ‰§è¡Œèµäh¥éœ€è¦å€åŠ ž®å¿ƒæ‰è¡Œã€‚主è¦çš„å±é™©åœ¨äºŽå¯èƒ½åœ¨ä¸¾læ„中引入一些错误,ž®¤å…¶æ˜¯åœ¨˜q›è¡Œæ‰‹å·¥é‡æž„的时候更是如此。这¿Uå±é™©å¼•å‘了寚w‡æž„æŠ€æœ¯çš„æ™®éæ‰¹è¯„åQšå½“代ç ä¸ä¼šå´©æºƒçš„æ—¶å€™äؓ什么è¦ä¿®æ”¹å®ƒå‘¢åQ?

您需è¦è¿›è¡Œä»£ç é‡æž„的原因å¯èƒ½æœ‰ä»¥ä¸‹å‡ ä¸ªï¼šä¼ è¯´ä¸­çš„½W¬ä¸€ä¸ªåŽŸå› æ˜¯åQšéœ€è¦ç‘ôæ‰¿äØ“æŸä¸ªå¤è€äñ”å“而开å‘çš„òq´ä»£ä¹…远的代ç ï¼Œæˆ–者çªç„¶ç¢°åˆ°è¿™äº›ä»£ç ã€‚最åˆçš„å¼€å‘团队已¾lä¸åœ¨äº†ã€‚我们必™åÕdˆ›å»ºå¢žåŠ äº†æ–°ç‰¹æ€§çš„æ–°ç‰ˆæœ¬èÊYä»Óž¼Œä½†æ˜¯˜q™äº›ä»£ç å·²ç»æ— æ³•ç†è§£äº†ã€‚新的开å‘队ä¼å¤œä»¥ç‘ô日地工作åQŒç ´è¯‘代ç ç„¶åŽæ˜ ž®„代ç ï¼Œ¾l过大é‡çš„规划与设计之åŽåQŒäh们将˜q™äº›ä»£ç åˆ†å‰²æˆç¢Žç‰‡ã€‚历¾lé‡é‡ç£¨éš¾ä¹‹åŽï¼Œæ‰€æœ‰è¿™äº›ä¸œè¥‰Kƒ½æŒ‰ç…§æ–°ç‰ˆæœ¬çš„è¦æ±‚å½’ä½äº†ã€‚è¿™æ˜¯è‹±é›„èˆ¬çš„é‡æž„æ•…äº‹ï¼Œå‡ ä¹Žæ²¡æœ‰äºø™ƒ½åœ¨ç»åŽ†äº†˜q™äº›ä¹‹åŽ‹zȀ讲述˜q™æ ·çš„æ•…事ã€?/p>

˜q˜æœ‰ä¸€¿U现实一些的情况是项目中加入了新的需求,需è¦å¯¹è®¾è®¡˜q›è¡Œä¿®æ”¹ã€‚è‡³äºŽæ˜¯å› äØ“åœ¨æœ€åˆçš„规划˜q‡ç¨‹ä¸­å¤±å¯Ÿï¼Œ˜q˜æ˜¯ç”׃ºŽé‡‡ç”¨äº†è„P代å¼çš„å¼€å‘过½E‹ï¼ˆæ¯”å¦‚æ•æ·å¼€å‘,或者是‹¹‹è¯•驱动的开å‘)而在开å‘过½E‹ä¸­æœ‰æ„引入需求,˜q™ä¸¤è€…åÆˆæ²¡æœ‰å®žè´¨æ€§çš„åŒºåˆ«ã€‚è¿™æ ïLš„釿ž„的规模覞®å¾—多,其内容一般涉åŠé€šè¿‡å¼•å…¥æŽ¥å£æˆ–è€…æŠ½è±¡ç±»æ¥æ›´æ”¹ç±»çš„ç‘ô承关¾p»ï¼Œä»¥åŠå¯¹ç±»˜q›è¡Œåˆ†å‰²å’Œé‡æ–°ç»„¾l‡ï¼Œ½{‰ç­‰ã€?/p>

釿ž„的最åŽä¸€ä¸ªåŽŸå› æ˜¯åQŒå½“存在å¯ç”¨çš„è‡ªåŠ¨é‡æž„å·¥å…äh—¶åQŒå¯ä»¥æœ‰ä¸€ä¸ªç”¨æ¥é¢„先生æˆä»£ç çš„å¿«æ·æ–¹å¼——ž®±å¥½æ¯”在您无法确定如何拼写æŸä¸ªå•è¯çš„æ—¶å€™ï¼Œå¯ä»¥ç”¨æŸ¿U拼写检查工兯‚¾“入这个å•è¯ã€‚比如说åQŒæ‚¨å¯ä»¥ç”¨è¿™¿Uåã^æ·¡æ— å¥‡çš„é‡æž„æ–ÒŽ³•ç”Ÿæˆ getter å’?setter æ–ÒŽ³•åQŒä¸€æ—¦ç†Ÿæ‚‰äº†˜q™æ ·çš„工典P¼Œå®ƒå°±å¯ä»¥ä¸ºæ‚¨èŠ‚çœå¾ˆå¤šçš„æ—¶é—´ã€?/p>

Eclipse çš„é‡æž„å·¥å…äh— æ„进行英雄çñ”çš„é‡æž?#8212;—适刘q™ç§è§„模的工具几乎没æœ?#8212;—但是ä¸è®ºæ˜¯å¦ç”¨åˆ°æ•æ·å¼€å‘技术,Eclipse 的工具对于一般程åºå‘˜ä¿®æ”¹ä»£ç çš„工作都å…ähœ‰æ— æ³•è¡¡é‡çš„ä­h倹{€‚毕竟ä“Q何夿‚çš„æ“作åªè¦èƒ½å¤Ÿè‡ªåЍ˜q›è¡ŒåQŒå°±å¯ä»¥ä¸é‚£ä¹ˆçƒ¦é—·äº†ã€‚åªè¦æ‚¨çŸ¥é“ Eclipse å®žçŽ°äº†ä»€ä¹ˆæ ·çš„é‡æž„工典P¼Œòq¶ç†è§£äº†å®ƒä»¬çš„适用情况åQŒæ‚¨çš„生产力ž®×ƒ¼šå¾—到æžå¤§çš„æé«˜ã€?/p>

è¦é™ä½Žå¯¹ä»£ç é€ æˆç ´å的风险,有两¿Ué‡è¦çš„æ–ÒŽ³•。第一¿U方法是对代ç è¿›è¡Œä¸€å¥—完全彻底的å•å…ƒ‹¹‹è¯•åQšåœ¨é‡æž„之å‰å’Œä¹‹åŽéƒ½å¿…须通过˜q™æ ·çš„æµ‹è¯•ã€‚ç¬¬äºŒç§æ–ÒŽ³•是ä‹É用自动化的工å…äh¥˜q›è¡Œé‡æž„åQŒæ¯”如说 Eclipse çš„é‡æž„特性ã€?/p>

ž®†å½»åº•çš„‹¹‹è¯•ä¸Žè‡ªåŠ¨åŒ–é‡æž„¾l“åˆèµäh¥ž®×ƒ¼šæ›´åŠ æœ‰æ•ˆäº†ï¼Œ˜q™æ ·é‡æž„也就从一¿U神¿U˜çš„è‰ºæœ¯å˜æˆäº†æœ‰ç”¨çš„æ—¥å¸¸å·¥å…·ã€‚äØ“äº†å¢žåŠ æ–°çš„åŠŸèƒ½æˆ–è€…æ”¹˜q›ä»£ç çš„å¯ç»´æŠ¤æ€§ï¼Œæˆ‘们å¯ä»¥åœ¨ä¸å½±å“原有代ç åŠŸèƒ½çš„åŸº¼‹€ä¸Šè¿…速且安全地改å˜å…¶¾l“构。这¿U能力会å¯ÒŽ‚¨è®¾è®¡å’Œå¼€å‘代ç çš„æ–¹å¼äº§ç”Ÿæžå¤§çš„媄å“,å³ä¾¿æ˜¯æ‚¨æ²¡æœ‰ž®†å…¶¾l“åˆåˆ°æ­£å¼çš„æ•æ·æ–ÒŽ³•中也没有关系ã€?/p>


Eclipse 䏭釿ž„çš„¾cÕdž‹

Eclipse çš„é‡æž„工具å¯ä»¥åˆ†ä¸ÞZ¸‰å¤§ç±»åQˆä¸‹é¢çš„™åºåºä¹Ÿå°±æ˜¯è¿™äº›å·¥å…·åœ¨ Refactoring èœå•中出现的™åºåºåQ‰ï¼š

  1. 对代ç è¿›è¡Œé‡å‘½åä»¥åŠæ”¹å˜ä»£ç çš„物ç†ç»“构,包括对属性ã€å˜é‡ã€ç±»ä»¥åпޥå£é‡æ–°å‘½ååQŒè¿˜æœ‰ç§»åŠ¨åŒ…å’Œç±»½{‰ã€?/li>
  2. 改嘾cÖM¸€¾U§çš„代ç é€»è¾‘¾l“æž„åQŒåŒ…括将匿å¾c»è{å˜äؓ嵌套¾c»ï¼Œž®†åµŒå¥—类转å˜ä¸ºé¡¶¾U§ç±»ã€æ ¹æ®å…·ä½“çš„¾cÕdˆ›å»ºæŽ¥å£ï¼Œä»¥åŠä»Žä¸€ä¸ªç±»ä¸­å°†æ–ÒŽ³•或者属性移到孾cÀLˆ–者父¾cÖM¸­ã€?/li>
  3. 改å˜ä¸€ä¸ªç±»å†…部的代ç ï¼ŒåŒ…括ž®†å±€éƒ¨å˜é‡å˜æˆç±»çš„属性ã€å°†æŸä¸ªæ–ÒŽ³•中选中部分的代ç å˜æˆä¸€ä¸ªç‹¬ç«‹çš„æ–ÒŽ³•ã€ä»¥åŠäؓ属性生æˆ?getter å’?setter æ–ÒŽ³•ã€?/li>

˜q˜æœ‰å‡ ä¸ªé‡æž„工具òq¶ä¸èƒ½å®Œå…¨å½’入这三个¿Uç±»åQŒç‰¹åˆ«æ˜¯ Change Method SignatureåQŒä¸˜q‡åœ¨æœ¬æ–‡ä¸­è¿˜æ˜¯å°†˜q™ä¸ªå·¥å…·å½’å…¥½W¬ä¸‰¾c…R€‚除了这¿U例外情况以外,本文下é¢å‡ èŠ‚éƒ½æ˜¯æŒ‰ç…§ä¸Šé¢çš„é¡ºåºæ¥è®¨è®º Eclipse 釿ž„工具的ã€?/p>


物ç†é‡ç»„与é‡å‘½å

昄¡„¶åQŒæ‚¨å³ä¾¿æ²¡æœ‰ç‰¹åˆ«çš„工典P¼Œä¹Ÿå¯ä»¥åœ¨æ–‡äšg¾pÈ»Ÿä¸­é‡å‘½åæ–‡äšg或者是¿UÕdŠ¨æ–‡äšgåQŒä½†æ˜¯å¦‚æžœæ“作对象是 Java æºä»£ç æ–‡ä»Óž¼Œæ‚¨å°±éœ€è¦ç¼–辑很多文ä»Óž¼Œæ›´æ–°å…¶ä¸­çš?import æˆ?package 语å¥ã€‚与此类ä¼û|¼Œç”¨æŸ¿U文本编辑器的æœç´¢ä¸Žæ›¿æ¢åŠŸèƒ½ä¹Ÿå¯ä»¥å¾ˆå®ÒŽ˜“地给¾c…R€æ–¹æ³•å’Œå˜é‡é‡æ–°å‘½ååQŒä½†æ˜¯è¿™æ ·åšçš„æ—¶å€™å¿…™åÕd分å°å¿ƒï¼Œå› äØ“ä¸åŒçš„ç±»å¯èƒ½å…ähœ‰åç§°ç›æ€¼¼çš„æ–¹æ³•或者å˜é‡ï¼›è¦æ˜¯ä»Žå¤´åˆ°å°¾‹‚€æŸ¥é¡¹ç›®ä¸­æ‰€æœ‰çš„æ–‡äšgåQŒæ¥ä¿è¯æ¯ä¸ªä¸œè¥¿çš„æ ‡è¯†å’Œä¿®æ”¹çš„æ­£¼‹®æ€§ï¼Œé‚£å¯çœŸå¤Ÿä¹å‘³çš„ã€?

Eclipse çš?Rename å’?Move 工具能够ååˆ†èªæ˜Žåœ°åœ¨æ•´ä¸ª™å¹ç›®ä¸­å®Œæˆè¿™æ ïLš„修改åQŒè€Œä¸éœ€è¦ç”¨æˆïLš„òq²æ¶‰ã€‚这是因ä¸?Eclipse å¯ä»¥ç†è§£ä»£ç çš„语义,从而能够识别出å¯ÒŽŸä¸ªç‰¹å®šæ–¹æ³•ã€å˜é‡æˆ–者类å称的引用。简化这一ä»ÕdŠ¡æœ‰åŠ©äºŽç¡®ä¿æ–¹æ³•ã€å˜é‡å’Œ¾cÈš„å称能够清晰地指½Cºå…¶ç”¨é€”ã€?/p>

我们¾l常å¯ä»¥å‘现代ç çš„å字䏿°å½“或者ä×o人容易误解,˜q™æ˜¯å› äؓ代ç ä¸Žæœ€åˆè®¾è®¡çš„功能有所ä¸åŒã€‚比方说åQŒæŸä¸ªç”¨æ¥åœ¨æ–‡äšg中查扄¡‰¹å®šå•è¯çš„½E‹åºä¹Ÿè®¸ä¼šæ‰©å±•䨓åœ?Web ™åµé¢ä¸­é€šè¿‡ URL èŽ·å– InputStream çš„æ“作。如果这一输入‹¹æœ€åˆå«å?file åQŒé‚£ä¹ˆå°±åº”该修改它的åå­—åQŒä»¥ä¾¿èƒ½å映其新增的更加一般的ç‰ÒŽ€§ï¼Œæ¯”æ–¹è¯?sourceStream 。开å‘äh员ç»å¸¸æ— æ³•æˆåŠŸåœ°ä¿®æ”¹˜q™äº›åç§°åQŒå› ä¸ø™¿™ä¸ªè¿‡½E‹æ˜¯ååˆ†æ··äØ•å’Œä¹å‘³çš„。这当然也会把下一个ä¸å¾—ä¸å¯¹è¿™äº›ç±»˜q›è¡Œæ“作的开å‘äh员弄¾pŠæ¶‚ã€?

è¦å¯¹æŸä¸ª Java 元素˜q›è¡Œé‡å‘½å,åªéœ€è¦ç®€å•地ä»?Package Explorer 视图中点击这个元素,或者从Java æºä»£ç æ–‡ä»¶ä¸­é€‰ä¸­˜q™ä¸ªå…ƒç´ åQŒç„¶åŽé€‰æ‹©èœå•™å?Refactor > Renameã€‚åœ¨å¯¹è¯æ¡†ä¸­è¾“入新的åç§°åQŒç„¶åŽé€‰æ‹©æ˜¯å¦éœ€è¦?Eclipse 也改å˜å¯¹˜q™ä¸ªå称的引用。实际显½Cºå‡ºæ¥çš„¼‹®åˆ‡å†…容与您所选元素的¾cÕdž‹æœ‰å…³ã€‚比方说åQŒå¦‚果选择的属性具æœ?getter å’?setter æ–ÒŽ³•åQŒé‚£ä¹ˆä¹Ÿž®±å¯ä»¥åŒæ—¶æ›´æ–°è¿™äº›æ–¹æ³•çš„åç§°åQŒä»¥å映新的属性。图1昄¡¤ºäº†ä¸€ä¸ªç®€å•的例å­ã€?

å›?1. é‡å‘½å一个局部å˜é‡?/strong>
Renaming a local variable

ž®±åƒæ‰€æœ‰çš„ Eclipse 釿ž„æ“ä½œä¸€æ øP¼Œå½“æ‚¨æŒ‡å®šäº†å…¨éƒ¨ç”¨æ¥æ‰§è¡Œé‡æž„的必è¦ä¿¡æ¯ä¹‹åŽåQŒæ‚¨ž®±å¯ä»¥ç‚¹å‡?Preview 按钮åQŒç„¶åŽåœ¨ä¸€ä¸ªå¯¹è¯æ¡†ä¸­å¯¹æ¯?Eclipse 打算˜q›è¡Œå“ªäº›å˜æ›´åQŒæ‚¨å¯ä»¥åˆ†åˆ«å¦å†³æˆ–者确认æ¯ä¸€ä¸ªå—到媄å“的文äšg中的æ¯ä¸€™å¹å˜æ›´ã€‚如果您对于 Eclipse æ­£ç¡®æ‰§è¡Œå˜æ›´çš„能力有信心的è¯åQŒæ‚¨å¯ä»¥åªæŒ‰ä¸?OK按钮。显ç„Óž¼Œå¦‚果您丼‹®å®šé‡æž„到底åšäº†ä»€ä¹ˆäº‹æƒ…,您就会想先预览一下,但是对于 Rename å’?Move ˜q™æ ·½Ž€å•çš„é‡æž„而言åQŒé€šå¸¸æ²¡æœ‰å¿…è¦é¢„览ã€?

Move æ“作ä¸?Rename ååˆ†ç›æ€¼¼åQšæ‚¨é€‰æ‹©æŸä¸ª Java 元素åQˆé€šå¸¸æ˜¯ä¸€ä¸ªç±»åQ‰ï¼Œä¸ºå…¶æŒ‡å®šä¸€ä¸ªæ–°ä½ç½®åQŒåƈ定义是å¦éœ€è¦æ›´æ–°å¼•用。然åŽï¼Œæ‚¨å¯ä»¥é€‰æ‹© Preview‹‚€æŸ¥å˜æ›´æƒ…况,或者选择 OK ç«‹å³æ‰§è¡Œé‡æž„åQŒå¦‚å›?所½Cºã€?

å›?2. ž®†ç±»ä»Žä¸€ä¸ªåŒ…¿UÕdˆ°å¦ä¸€ä¸ªåŒ…
Moving a class

在æŸäº›åã^åîC¸ŠåQˆç‰¹åˆ«æ˜¯ WindowsåQ‰ï¼Œæ‚¨è¿˜å¯ä»¥åœ?Package Explorer 视图中通过½Ž€å•拖攄¡š„æ–ÒŽ³•ž®†ç±»ä»Žä¸€ä¸ªåŒ…或者文件夹中移到å¦ä¸€ä¸ªåŒ…或文件夹中。所有的引用都会自动更新ã€?/p>


釿–°å®šä¹‰¾cÈš„关系

Eclipse 中有大é‡çš„釿ž„工典P¼Œä½¿æ‚¨èƒ½å¤Ÿè‡ªåŠ¨æ”¹å˜¾cÈš„å…³ç³»ã€‚è¿™äº›é‡æž„å·¥å…·åÆˆæ²¡æœ‰ Eclipse æä¾›çš„其他工具那么常用,但是很有价å€û|¼Œå› äؓ它们能够执行éžå¸¸å¤æ‚çš„ä“Q务。å¯ä»¥è¯´åQŒå½“它们用得上的时候,ž®×ƒ¼šéžå¸¸æœ‰ç”¨ã€?/p>

æå‡åŒ¿å¾cÖM¸ŽåµŒå¥—¾c?/span>

Convert Anonymous ClassåQˆè{æ¢åŒ¿åç±»åQ‰å’Œ Convert Nested TypeåQˆè{æ¢åµŒå¥—ç±»åQ‰è¿™ä¸¤ç§é‡æž„æ–ÒŽ³•æ¯”è¾ƒç›æ€¼¼åQŒå®ƒä»¬éƒ½ž®†æŸä¸ªç±»ä»Žå…¶å½“å‰èŒƒå›´¿UÕdŠ¨åˆ°åŒ…å«è¿™ä¸ªç±»çš„范围上ã€?/p>

匿å¾cÀL˜¯ä¸€¿U语法速写标记åQŒä‹É您能够在需è¦å®žçްæŸä¸ªæŠ½è±¡ç±»æˆ–者接å£çš„地方创å¾ä¸€ä¸ªç±»çš„实例,而ä¸éœ€è¦æ˜¾å¼æä¾›ç±»çš„å¿U°ã€‚比如在创å¾ç”¨æˆ·ç•Œé¢ä¸­çš„监å¬å™¨æ—¶åQŒå°±¾l常用到匿å¾c…R€‚在清å•1中,å‡è®¾ Bag 是在其他地方定义的一个接å£ï¼Œå…¶ä¸­å£°æ˜Žäº†ä¸¤ä¸ªæ–¹æ³•, get() å’?set() ã€?


æ¸…å• 1. Bag ¾c?/strong>
 
      public class BagExample
{
   void processMessage(String msg)
   {
      Bag bag = new Bag()
      {
         Object o;
         public Object get()
         {
            return o;
         }
         public void set(Object o)
         {
            this.o = o;
         }
      };
      bag.set(msg);
      MessagePipe pipe = new MessagePipe();
      pipe.send(bag);
   }
}

当匿åç±»å˜å¾—很大åQŒå…¶ä¸­çš„代ç éš¾ä»¥é˜…读的时候,您就应该考虑ž®†è¿™ä¸ªåŒ¿åç±»å˜æˆä¸¥æ ¼æ„义上的¾c»ï¼›ä¸ÞZº†ä¿æŒž®è£…性(æ¢å¥è¯è¯´åQŒå°±æ˜¯å°†å®ƒéšè—è“væ¥ï¼Œä½¿å¾—ä¸å¿…知é“它的外部¾cÖM¸çŸ¥é“它)åQŒæ‚¨åº”该ž®†å…¶å˜æˆåµŒå¥—¾c»ï¼Œè€Œä¸æ˜¯é¡¶¾U§ç±»ã€‚您å¯ä»¥åœ¨è¿™ä¸ªåŒ¿å类的内部点击,然åŽé€‰æ‹© Refactor > Convert Anonymous Class to Nested ž®±å¯ä»¥äº†ã€‚当出现¼‹®è®¤å¯¹è¯æ¡†çš„æ—¶å€™ï¼Œä¸ø™¿™ä¸ªç±»è¾“å…¥åç§°åQŒæ¯”å¦?BagImpl åQŒç„¶åŽé€‰æ‹© Preview或è€?OKã€‚è¿™æ øP¼Œä»£ç ž®±å˜æˆäº†å¦‚清å?所½Cºçš„æƒ…åÅžã€?


æ¸…å• 2. ¾lè¿‡é‡æž„çš?Bag ¾c?/strong>
 
public class BagExample
{
   private final class BagImpl implements Bag
   {
      Object o;
      public Object get()
      {
         return o;
      }
      public void set(Object o)
      {
         this.o = o;
      }
   }
       
   void processMessage(String msg)
   {
     Bag bag = new BagImpl();
     bag.set(msg);
     MessagePipe pipe = new MessagePipe();
     pipe.send(bag);
   }
}

当您惌™®©å…¶ä»–的类使用æŸä¸ªåµŒå¥—¾cÀL—¶åQŒConvert Nested Type to Top Level ž®±å¾ˆæœ‰ç”¨äº†ã€‚比方说åQŒæ‚¨å¯ä»¥åœ¨ä¸€ä¸ªç±»ä¸­ä‹É用值对象,ž®±åƒä¸Šé¢çš?BagImpl ¾c»é‚£æ —÷€‚å¦‚æžœæ‚¨åŽæ¥åˆå†³å®šåº”该在多个¾cÖM¹‹é—´å…±äº«è¿™ä¸ªæ•°æ®ï¼Œé‚£ä¹ˆé‡æž„æ“作ž®Þpƒ½ä»Žè¿™ä¸ªåµŒå¥—类中创建新的类文äšg。您å¯ä»¥åœ¨æºä»£ç æ–‡äšg中高亮选中¾cÕd¿UŽÍ¼ˆæˆ–者在 Outline 视图中点å‡È±»çš„å¿UŽÍ¼‰åQŒç„¶åŽé€‰æ‹© Refactor > Convert Nested Type to Top LevelåQŒè¿™æ ·å°±å®žçŽ°äº†é‡æž„ã€?

˜q™ç§é‡æž„è¦æ±‚æ‚¨äØ“è£…å…¥å®žä¾‹æä¾›ä¸€ä¸ªåå­—ã€‚é‡æž„工具也会æä¾›å¾è®®çš„åç§°åQŒæ¯”å¦?example åQŒæ‚¨å¯ä»¥æŽ¥å—˜q™ä¸ªå字。这个åå­—çš„æ„æ€è¿‡ä¸€ä¼šå„¿ž®±æ¸…楚了。点å‡?OK 之åŽåQŒå¤–层类 BagExample ž®×ƒ¼šå˜æˆæ¸…å•3所½Cºçš„æ ·å­ã€?


æ¸…å• 3. ¾lè¿‡é‡æž„çš?Bag ¾c?/strong>
public class BagExample
{
   void processMessage(String msg)
   {
      Bag bag = new BagImpl(this);
      bag.set(msg);
      MessagePipe pipe = new MessagePipe();
      pipe.send(bag);
   }
}

è¯äh³¨æ„,当一个类是嵌套类的时候,它å¯ä»¥è®¿é—®å…¶å¤–层¾cÈš„æˆå‘˜ã€‚äØ“äº†ä¿ç•™è¿™¿UåŠŸèƒ½ï¼Œé‡æž„˜q‡ç¨‹ž®†ä¸€ä¸ªè£…入类 BagExample 的实例放在å‰é¢é‚£ä¸ªåµŒå¥—类中。这ž®±æ˜¯ä¹‹å‰è¦æ±‚您输入å¿U°çš„实例å˜é‡ã€‚åŒæ—¶ä¹Ÿåˆ›å¾äº†ç”¨äºŽè®¾¾|®è¿™ä¸ªå®žä¾‹å˜é‡çš„æž„é€ å‡½æ•°ã€‚é‡æž„过½E‹åˆ›å»ºçš„æ–°ç±» BagImpl 如清å?所½Cºã€?


æ¸…å• 4. BagImpl ¾c?/strong>
  
final class BagImpl implements Bag
{
   private final BagExample example;
   /**
    * @paramBagExample
    */
  BagImpl(BagExample example)
   {
      this.example = example;
      // TODO Auto-generated constructor stub
   }
   Object o;
   public Object get()
   {
      return o;
   }
   public void set(Object o)
   {
      this.o = o;
   }
}

如果您的情况与这个例å­ç›¸åŒï¼Œä¸éœ€è¦ä¿ç•™å¯¹ BagExample 的访问,您也å¯ä»¥å¾ˆå®‰å…¨åœ°åˆ é™¤˜q™ä¸ªå®žä¾‹å˜é‡ä¸Žæž„造函敎ͼŒž®?BagExample ¾cÖM¸­çš„ä»£ç æ”¹æˆç¼ºçœçš„æ— å‚数构造函数ã€?

在类¾l§æ‰¿å…³ç³»å†…移动æˆå‘?/span>

˜q˜æœ‰ä¸¤ä¸ªé‡æž„工具åQŒPush Down å’?Pull UpåQŒåˆ†åˆ«å®žçް将¾cÀL–¹æ³•或者属性从一个类¿UÕdŠ¨åˆ°å…¶å­ç±»æˆ–父¾cÖM¸­ã€‚å‡è®¾æ‚¨æœ‰ä¸€ä¸ªåä¸?Vehicle 的抽象类åQŒå…¶å®šä¹‰å¦‚清å?所½Cºã€?


æ¸…å• 5. 抽象çš?Vehicle ¾c?/strong>
public abstract class Vehicle
{
   protected int passengers;
   protected String motor;
   
   public int getPassengers()
   {
      return passengers;
   }
   public void setPassengers(int i)
   {
      passengers = i;
   }
   public String getMotor()
   {
      return motor;
   }
   public void setMotor(String string)
   {
      motor = string;
   }
}

您还有一ä¸?Vehicle 的孾c»ï¼Œ¾cÕdä¸?Automobile åQŒå¦‚清å•6所½Cºã€?


清å•6. Automobile ¾c?/strong>
public class Automobile extends Vehicle
{
   private String make;
   private String model;
   public String getMake()
   {
      return make;
   }
   public String getModel()
   {
      return model;
   }
   public void setMake(String string)
   {
      make = string;
   }
   public void setModel(String string)
   {
      model = string;
   }
}

è¯äh³¨æ„, Vehicle 有一个属性是 motor ã€‚å¦‚æžœæ‚¨çŸ¥é“æ‚¨å°†æ°¸è¿œåªå¤„ç†æ±½è½¦ï¼Œé‚£ä¹ˆ˜q™æ ·åšå°±å¥½äº†åQ›ä½†æ˜¯å¦‚果您也å…许出现划艇之¾cÈš„东西åQŒé‚£ä¹ˆæ‚¨ž®±éœ€è¦å°† motor 属性从 Vehicle ¾cÖM¸‹æ”‘Öˆ° Automobile ¾cÖM¸­ã€‚äØ“æ­¤ï¼Œæ‚¨å¯ä»¥åœ¨ Outline 视图中选择 motor åQŒç„¶åŽé€‰æ‹© Refactor > Push Downã€?

Eclipse ˜q˜æ˜¯æŒø™ªæ˜Žçš„åQŒå®ƒçŸ¥é“您ä¸å¯èƒ½æ€ÀL˜¯å•å•¿UÕdЍæŸä¸ªå±žæ€§æœ¬íw«ï¼Œå› æ­¤˜q˜æä¾›äº† Add Required 按钮åQŒä¸˜q‡åœ¨ Eclipse 2.1 中,˜q™ä¸ªåŠŸèƒ½òq¶ä¸æ€ÀL˜¯èƒ½æ­£¼‹®åœ°å·¥ä½œã€‚您需è¦éªŒè¯ä¸€ä¸‹ï¼Œçœ‹æ‰€æœ‰ä¾èµ–于˜q™ä¸ªå±žæ€§çš„æ–ÒŽ³•是å¦éƒ½æŽ¨åˆîCº†ä¸‹ä¸€å±‚。在本例中,˜q™æ ·çš„æ–¹æ³•有两个åQŒå³ä¸?motor ç›æ€¼´çš?getter å’?setter æ–ÒŽ³•åQŒå¦‚å›?所½Cºã€?

å›?3. 加入所需的æˆå‘?/strong>
Adding required members

在按˜q?OK按钮之åŽåQ?motor 属性以å?getMotor() å’?setMotor() æ–ÒŽ³•ž®×ƒ¼š¿UÕdЍåˆ?Automobile ¾cÖM¸­ã€‚清å?昄¡¤ºäº†åœ¨˜q›è¡Œäº†è¿™‹Æ¡é‡æž„之å?Automobile ¾cÈš„情åÅžã€?


æ¸…å• 7. ¾lè¿‡é‡æž„çš?Automobile ¾c?/strong>
public class Automobile extends Vehicle
{
   private String make;
   private String model;
   protected String motor;
   public String getMake()
   {
      return make;
   }
   public String getModel()
   {
      return model;
   }
   public void setMake(String string)
   {
      make = string;
   }
   public void setModel(String string)
   {
      model = string;
   }
   public String getMotor()
   {
      return motor;
   }
   public void setMotor(String string)
   {
      motor = string;
   }
}

Pull Up 釿ž„ä¸?Push Down 几乎相åŒåQŒå½“ç„?Pull Up 是将¾cÀLˆå‘˜ä»Žä¸€ä¸ªç±»ä¸­ç§»åˆ°å…¶çˆ¶ç±»ä¸­ï¼Œè€Œä¸æ˜¯å­¾cÖM¸­ã€‚如果您½EåŽæ”¹å˜ä¸ÀL„åQŒå†³å®šè¿˜æ˜¯æŠŠ motor ¿UÕd›žåˆ?Vehicle ¾cÖM¸­åQŒé‚£ä¹ˆæ‚¨ä¹Ÿè®¸ž®×ƒ¼šç”¨åˆ°˜q™ç§é‡æž„ã€‚åŒæ ·éœ€è¦æé†’您åQŒä¸€å®šè¦¼‹®è®¤æ‚¨æ˜¯å¦é€‰æ‹©äº†æ‰€æœ‰å¿…需的æˆå‘˜ã€?

Automobile ¾cÖM¸­å…ähœ‰æˆå‘˜ motoråQŒè¿™æ„å‘³ç€æ‚¨å¦‚果创建å¦ä¸€ä¸ªå­¾c»ï¼Œæ¯”æ–¹è¯?Bus åQŒæ‚¨ž®Þp¿˜éœ€è¦å°† motor åQˆåŠå…¶ç›¸å…Ïx–¹æ³•)加入åˆ?Bus ¾cÖM¸­ã€‚有一¿U方法å¯ä»¥è¡¨½Cø™¿™¿Uå…³¾p»ï¼Œå›_ˆ›å»ÞZ¸€ä¸ªåä¸?Motorized 的接å£ï¼Œ Automobile å’?Bus 都实现这个接å£ï¼Œä½†æ˜¯ RowBoat ä¸å®žçްã€?

åˆ›å¾ Motorized æŽ¥å£æœ€½Ž€å•çš„æ–ÒŽ³•是在 Automobile 上ä‹Éç”?Extract Interface 釿ž„ã€‚äØ“æ­¤ï¼Œæ‚¨å¯ä»¥åœ¨ Outline 视图中选择 Automobile åQŒç„¶åŽä»Žèœå•中选择 Refactor > Extract Interface。您å¯ä»¥åœ¨å¼¹å‡ºçš„å¯¹è¯æ¡†ä¸­é€‰æ‹©æ‚¨å¸Œæœ›åœ¨æŽ¥å£ä¸­åŒ…å«å“ªäº›æ–¹æ³•,如图4所½Cºã€?

å›?4. æå– Motorized 接å£
Motorized interface

点击 OK 之åŽåQŒæŽ¥å£å°±åˆ›å¾å¥½äº†åQŒå¦‚清å•8所½Cºã€?/p>
æ¸…å• 8. Motorized 接å£
public interface Motorized
{
   public abstract String getMotor();
   public abstract void setMotor(String string);
}

åŒæ—¶åQ?Automobile çš„ç±»å£°æ˜Žä¹Ÿå˜æˆäº†ä¸‹é¢çš„æ ·å­ï¼š

public class Automobile extends Vehicle implements Motorized

使用父类

æœ¬é‡æž„å·¥å…ïL±»åž‹ä¸­æœ€åŽä¸€ä¸ªæ˜¯ User Supertyp Where Possible。想象一个用æ¥ç®¡ç†æ±½è½¦ç»†å¸çš„应用½E‹åºã€‚它自始至终都ä‹Éç”?Automobile ¾cÕdž‹çš„对象。如果您惛_¤„ç†æ‰€æœ‰ç±»åž‹çš„äº¤é€šå·¥å…øP¼Œé‚£ä¹ˆæ‚¨å°±å¯ä»¥ç”¨è¿™¿U釿ž„将所有对 Automobile çš„å¼•ç”¨éƒ½å˜æˆå¯?Vehicle 的引用(å‚看å›?åQ‰ã€‚如果您在代ç ä¸­ç”?instanceof æ“作执行了ä“Q何类型检查的è¯ï¼Œæ‚¨å°†éœ€è¦å†³å®šåœ¨˜q™äº›åœ°æ–¹é€‚用的是原先的类˜q˜æ˜¯çˆ¶ç±»åQŒç„¶åŽé€‰ä¸­½W¬ä¸€ä¸ªé€‰é¡¹“Use the selected supertype in 'instanceof' expressions”ã€?

å›?5. ž®?Automobile æ”ÒŽˆå…¶çˆ¶¾c?Vehicle
Supertype

使用父类的需求在 Java 语言中ç»å¸¸å‡ºçŽŽÍ¼Œç‰¹åˆ«æ˜¯åœ¨ä½¿ç”¨äº?Factory Method 模å¼çš„æƒ…况下。这¿U模å¼çš„å…¸åž‹å®žçŽ°æ–¹å¼æ˜¯åˆ›å»ÞZ¸€ä¸ªæŠ½è±¡ç±»åQŒå…¶ä¸­å…·æœ‰é™æ€æ–¹æ³?create() åQŒè¿™ä¸ªæ–¹æ³•返回的是实çŽîCº†˜q™ä¸ªæŠ½è±¡¾cÈš„一个具体对象。如果需创å¾çš„具体对象的¾cÕdž‹ä¾èµ–于实现的¾l†èŠ‚åQŒè€Œè°ƒç”¨ç±»å¯¹å®žçŽ°ç»†èŠ‚åÆˆä¸æ„Ÿå…´è¶£çš„æƒ…况下åQŒå¯ä»¥ä‹É用这一模å¼ã€?


改嘾cÕd†…部的代ç 

最大一¾c»é‡æž„是实现了类内部代ç é‡ç»„çš„é‡æž„æ–¹æ³•ã€‚åœ¨æ‰€æœ‰çš„é‡æž„æ–ÒŽ³•ä¸­ï¼Œåªæœ‰˜q™ç±»æ–ÒŽ³•å…许您引入或者移除中间å˜é‡ï¼Œæ ÒŽ®åŽŸæœ‰æ–ÒŽ³•中的部分代ç åˆ›å¾æ–°æ–¹æ³•,以åŠä¸ºå±žæ€§åˆ›å»?getter å’?setter æ–ÒŽ³•ã€?/p>

æå–与内åµ?/span>

æœ‰ä¸€äº›é‡æž„方法是ä»?Extract ˜q™ä¸ªè¯å¼€å¤´çš„åQšExtract Methodã€Extract Local Variable 以åŠExtract Constants。第一ä¸?Extract Method çš„æ„æ€æ‚¨å¯èƒ½å·²ç»çŒœåˆ°äº†ï¼Œå®ƒæ ¹æ®æ‚¨é€‰ä¸­çš„代ç åˆ›å»ºæ–°çš„æ–¹æ³•。我们以清å•8中那个类çš?main() æ–ÒŽ³•ä¸ÞZ¾‹ã€‚它首先å–得命ä×o行选项的å€û|¼Œå¦‚果有以 -D 开头的选项åQŒå°±ž®†å…¶ä»¥å-值对的åÅžå¼å­˜å‚¨åœ¨ä¸€ä¸?Properties 对象中ã€?


æ¸…å• 8. main()
import java.util.Properties;
import java.util.StringTokenizer;
public class StartApp
{
   public static void main(String[] args)
   {
      Properties props = new Properties();
      for (int i= 0; i < args.length; i++)
      {
         if(args[i].startsWith("-D"))
         {
           String s = args[i].substring(2);
           StringTokenizer st = new StringTokenizer(s, "=");
            if(st.countTokens() == 2)
            {
              props.setProperty(st.nextToken(), st.nextToken());
            }
         }
      }
      //continue...
   }
}

ž®†ä¸€éƒ¨åˆ†ä»£ç ä»Žä¸€ä¸ªæ–¹æ³•中å–出òq¶æ”¾˜q›å¦ä¸€ä¸ªæ–¹æ³•ä¸­çš„åŽŸå› ä¸»è¦æœ‰ä¸¤ç§ã€‚第一¿U原因是˜q™ä¸ªæ–ÒŽ³•太长åQŒåƈ且完æˆäº†ä¸¤ä¸ªä»¥ä¸Šé€»è¾‘上截然ä¸åŒçš„æ“ä½œã€‚ï¼ˆæˆ‘ä»¬ä¸çŸ¥é“上é¢é‚£ä¸?main() æ–ÒŽ³•˜q˜è¦å¤„ç†å“ªäº›ä¸œè¥¿åQŒä½†æ˜¯ä»ŽçŽ°åœ¨æŽŒæ¡çš„è¯æ®æ¥çœ‹ï¼Œ˜q™ä¸æ˜¯ä»Žå…¶ä¸­æå–å‡ÞZ¸€ä¸ªæ–¹æ³•çš„ç†ç”±ã€‚)å¦ä¸€¿U原因是有一ŒDµé€»è¾‘上清晰的代ç åQŒè¿™ŒDµä»£ç å¯ä»¥è¢«å…¶ä»–æ–ÒŽ³•é‡ç”¨ã€‚比方说在æŸäº›æ—¶å€™ï¼Œæ‚¨å‘现自己在很多ä¸åŒçš„æ–¹æ³•中都é‡å¤ç¼–写了相åŒçš„几行代ç ã€‚é‚£ž®±æœ‰å¯èƒ½æ˜¯éœ€è¦é‡æž„的原因了,ä¸è¿‡é™¤éžçœŸçš„需è¦é‡ç”¨è¿™éƒ¨åˆ†ä»£ç åQŒå¦åˆ™æ‚¨å¾ˆå¯èƒ½åƈä¸ä¼šæ‰§è¡Œé‡æž„ã€?

å‡è®¾æ‚¨è¿˜éœ€è¦åœ¨å¦å¤–一个地方解æžå-值对åQŒåƈž®†å…¶æ”‘Öœ¨ Properties 对象中,那么您å¯ä»¥å°†åŒ…å« StringTokenizer 声明和下é¢çš„ if 语å¥çš„è¿™ŒDµä»£ç æŠ½å–出æ¥ã€‚äØ“æ­¤ï¼Œæ‚¨å¯ä»¥é«˜äº®é€‰ä¸­˜q™æ®µä»£ç åQŒç„¶åŽä»Žèœå•中选择 Refactor > Extract Method。您需è¦è¾“入方法å¿UŽÍ¼Œ˜q™é‡Œè¾“å…¥ addProperty åQŒç„¶åŽéªŒè¯è¿™ä¸ªæ–¹æ³•çš„ä¸¤ä¸ªå‚æ•°åQ?Properties prop å’?Strings 。清å?昄¡¤ºç”?Eclipse æå–äº?addProp() æ–ÒŽ³•之厾cÈš„情况ã€?


æ¸…å• 9. æå–出æ¥çš?addProp()
import java.util.Properties;
import java.util.StringTokenizer;
public class Extract
{
   public static void main(String[] args)
   {
      Properties props = new Properties();
      for (int i = 0; i < args.length; i++)
      {
         if (args[i].startsWith("-D"))
         {
            String s = args[i].substring(2);
            addProp(props, s);
         }
      }
   }
   private static void addProp(Properties props, String s)
   {
      StringTokenizer st = new StringTokenizer(s, "=");
      if (st.countTokens() == 2)
      {
         props.setProperty(st.nextToken(), st.nextToken());
      }
   }
}

Extract Local Variable 釿ž„å–出一ŒDµè¢«ç›´æŽ¥ä½¿ç”¨çš„表辑ּåQŒç„¶åŽå°†˜q™ä¸ªè¡¨è¾¾å¼é¦–先赋值给一个局部å˜é‡ã€‚ç„¶åŽåœ¨åŽŸå…ˆä½¿ç”¨é‚£ä¸ªè¡¨è¾¾å¼çš„地方使用˜q™ä¸ªå˜é‡ã€‚比方说åQŒåœ¨ä¸Šé¢çš„æ–¹æ³•中åQŒæ‚¨å¯ä»¥é«˜äº®é€‰ä¸­å¯?st.nextToken() 的第一‹Æ¡è°ƒç”¨ï¼Œç„¶åŽé€‰æ‹© Refactor > Extract Local Variable。您ž®†è¢«æç¤ºè¾“入一个å˜é‡å¿UŽÍ¼Œ˜q™é‡Œè¾“å…¥ key 。请注æ„åQŒè¿™é‡Œæœ‰ä¸€ä¸ªå°†è¢«é€‰ä¸­è¡¨è¾¾å¼æ‰€æœ‰å‡ºçŽ°çš„åœ°æ–¹éƒ½æ›¿æ¢æˆæ–°å˜é‡çš„引用的选项。这个选项通常是适用的,但是对这里的 nextToken() æ–ÒŽ³•ä¸é€‚用åQŒå› ä¸ø™¿™ä¸ªæ–¹æ³•(昄¡„¶åQ‰åœ¨æ¯ä¸€‹Æ¡è°ƒç”¨çš„æ—¶å€™éƒ½˜q”回ä¸åŒçš„倹{€‚确认这个选项未被选中。å‚è§å›¾6ã€?

å›?6. ä¸å…¨éƒ¨æ›¿æ¢æ‰€é€‰çš„表达å¼?/strong>
Extract variable

接下æ¥ï¼Œåœ¨ç¬¬äºŒæ¬¡è°ƒç”¨ st.nextToken() 的地斚w‡å¤è¿›è¡Œé‡æž„,˜q™ä¸€‹Æ¡è°ƒç”¨çš„æ˜¯ä¸€ä¸ªæ–°çš„局部å˜é‡?value 。清å?0昄¡¤ºäº†è¿™ä¸¤æ¬¡é‡æž„之åŽä»£ç çš„æƒ…å½¢ã€?


æ¸…å• 10. 釿ž„之åŽçš„代ç ?/strong>
private static void addProp(Properties props, String s)
   {
     StringTokenizer st = new StringTokenizer(s, "=");
      if(st.countTokens() == 2)
      {
         String key = st.nextToken();
         String value = st.nextToken();
        props.setProperty(key, value);
      }
   }

用这¿Uæ–¹å¼å¼•å…¥å˜é‡æœ‰å‡ ç‚¹å¥½å¤„ã€‚é¦–å…ˆï¼Œé€šè¿‡ä¸ø™¡¨è¾‘Ö¼æä¾›æœ‰æ„义的åç§°åQŒå¯ä»¥ä‹Éå¾—ä»£ç æ‰§è¡Œçš„ä»ÕdŠ¡æ›´åŠ æ¸…æ™°ã€‚ç¬¬äºŒï¼Œä»£ç è°ƒè¯•å˜å¾—æ›´å®¹æ˜“ï¼Œå› äØ“æˆ‘ä»¬å¯ä»¥å¾ˆå®¹æ˜“地‹‚€æŸ¥è¡¨è¾‘Ö¼˜q”回的倹{€‚最åŽï¼Œåœ¨å¯ä»¥ç”¨ä¸€ä¸ªå˜é‡æ›¿æ¢åŒä¸€è¡¨è¾¾å¼çš„多个实例的情况下åQŒæ•ˆçއ将大大æé«˜ã€?/p>

Extract Constant ä¸?Extract Local Variable ç›æ€¼¼åQŒä½†æ˜¯æ‚¨å¿…é¡»é€‰æ‹©é™æ€å¸¸é‡è¡¨è¾‘Ö¼åQŒé‡æž„工具将会把它è{æ¢æˆé™æ€çš„ final 帔R‡ã€‚这在将¼‹¬ç¼–ç çš„æ•°å­—和字½W¦ä¸²ä»Žä»£ç ä¸­åŽ»é™¤çš„æ—¶å€™éžå¸¸æœ‰ç”¨ã€‚比方说åQŒåœ¨ä¸Šé¢çš„代ç ä¸­æˆ‘们ç”?#8220;-D”˜q™ä¸€å‘½ä×o行选项æ¥å®šä¹‰å-值对。先ž®?#8220;-D”高亮选中åQŒé€‰æ‹© Refactor > Extract ConstantåQŒç„¶åŽè¾“å…?DEFINE ä½œäØ“å¸”R‡çš„å¿U°ã€‚釿ž„之åŽçš„代ç å¦‚清å?1所½Cºï¼š


æ¸…å• 11. 釿ž„之åŽçš„代ç ?/strong>
public class Extract
{
   private static final String DEFINE = "-D";
   public static void main(String[] args)
   {
      Properties props = new Properties();
      for (int i = 0; i < args.length; i++)
      {
         if (args[i].startsWith(DEFINE))
         {
            String s = args[i].substring(2);
            addProp(props, s);
         }
      }
   }
   // ...

对于æ¯ä¸€¿U?Extract... ¾cÈš„釿ž„åQŒéƒ½å­˜åœ¨å¯¹åº”çš?Inline... 釿ž„åQŒæ‰§è¡Œä¸Žä¹‹ç›¸åçš„æ“作。比方说åQŒå¦‚果您高亮选中上é¢ä»£ç ä¸­çš„å˜é‡ såQŒé€‰æ‹© Refactor > Inline...åQŒç„¶åŽç‚¹å‡?OKåQŒEclipse ž®×ƒ¼šåœ¨è°ƒç”?addProp() 的时候直接ä‹Éç”?args[i].substring(2) ˜q™ä¸ªè¡¨è¾¾å¼ï¼Œå¦‚下所½Cºï¼š

        if(args[i].startsWith(DEFINE))
         {
            addProp(props,args[i].substring(2));
         }

˜q™æ ·æ¯”ä‹É用äÍæ—¶å˜é‡æ•ˆçŽ‡æ›´é«˜ï¼Œä»£ç ä¹Ÿå˜å¾—更加简è¦ï¼Œè‡³äºŽ˜q™æ ·çš„ä»£ç æ˜¯æ˜“读˜q˜æ˜¯å«æØœåQŒå°±å–决于您的观点了。丘q‡ä¸€èˆ¬è¯´æ¥ï¼Œ˜q™æ ·çš„å†…åµŒé‡æž„没什么值得推è的地æ–V€?/p>

您å¯ä»¥æŒ‰ç…§ç”¨å†…åµŒè¡¨è¾¾å¼æ›¿æ¢å˜é‡çš„ç›¸åŒæ–ÒŽ³•åQŒé«˜äº®é€‰ä¸­æ–ÒŽ³•åï¼Œæˆ–è€…é™æ€?final 帔R‡åQŒç„¶åŽä»Žèœå•中选择 Refactor > Inline...åQŒEclipse ž®×ƒ¼šç”¨æ–¹æ³•çš„ä»£ç æ›¿æ¢æ–ÒŽ³•调用åQŒæˆ–者用帔R‡çš„值替æ¢å¯¹å¸”R‡çš„引用ã€?

ž®è£…属æ€?/span>

é€šå¸¸æˆ‘ä»¬è®¤äØ“ž®†å¯¹è±¡çš„内部¾l“æž„æš´éœ²å‡ºæ¥æ˜¯ä¸€¿Uä¸å¥½çš„åšæ³•。这也正æ˜?Vehicle ¾cÕdŠå…¶å­¾c»éƒ½å…ähœ‰ private 或è€?protected 属性,而用 public setter å’?getter æ–ÒŽ³•æ¥è®¿é—®å±žæ€§çš„原因。这些方法å¯ä»¥ç”¨ä¸¤ç§ä¸åŒçš„æ–¹å¼è‡ªåŠ¨ç”Ÿæˆã€?

½W¬ä¸€¿U生æˆè¿™äº›æ–¹æ³•çš„æ–¹å¼æ˜¯ä‹Éç”?Source > Generate Getter and Setter èœå•。这ž®†ä¼šæ˜„¡¤ºä¸€ä¸ªå¯¹è¯æ¡†åQŒå…¶ä¸­åŒ…嫿‰€æœ‰å°šæœªå­˜åœ¨çš„ getter å’?setter æ–ÒŽ³•。丘q‡å› ä¸ø™¿™¿Uæ–¹å¼æ²¡æœ‰ç”¨æ–°æ–¹æ³•更新对˜q™äº›å±žæ€§çš„引用åQŒæ‰€ä»¥åƈä¸ç®—æ˜¯é‡æž„;必è¦çš„æ—¶å€™ï¼Œæ‚¨å¿…™å»è‡ªå·±å®Œæˆæ›´æ–°å¼•用的工作。这¿Uæ–¹å¼å¯ä»¥èŠ‚¾U¦å¾ˆå¤šæ—¶é—ß_¼Œä½†æ˜¯æœ€å¥½æ˜¯åœ¨ä¸€å¼€å§‹åˆ›å»ºç±»çš„æ—¶å€™ï¼Œæˆ–者是å‘类中加入新属性的时候ä‹Éç”¨ï¼Œå› äØ“˜q™äº›æ—¶å€™è¿˜ä¸å­˜åœ¨å¯¹å±žæ€§çš„引用åQŒæ‰€ä»¥ä¸éœ€è¦å†ä¿®æ”¹å…¶ä»–代ç ã€?

½W¬äºŒ¿U生æˆ?getter å’?setter æ–ÒŽ³•çš„æ–¹å¼æ˜¯é€‰ä¸­æŸä¸ªå±žæ€§ï¼Œç„¶åŽä»Žèœå•中选择 Refactor > Encapsulate Field。这¿Uæ–¹å¼ä¸€‹Æ¡åªèƒ½äؓ一个属性生æˆ?getter å’?setter æ–ÒŽ³•åQŒä¸˜q‡å®ƒä¸?Source > Generate Getter and Setter 相ååQŒå¯ä»¥å°†å¯¹è¿™ä¸ªå±žæ€§çš„å¼•ç”¨æ”¹å˜æˆå¯¹æ–°æ–¹æ³•的调用ã€?

例如åQŒæˆ‘们å¯ä»¥å…ˆåˆ›å¾ä¸€ä¸ªæ–°çš„简ç‰?Automobile ¾c»ï¼Œå¦‚清å?2所½Cºã€?


æ¸…å• 12. ½Ž€å•çš„ Automobile ¾c?/strong>
public class Automobile extends Vehicle
{
   public String make;
   public String model;
}

接下æ¥ï¼Œåˆ›å¾ä¸€ä¸ªç±»å®žä¾‹åŒ–了 Automobile 的类åQŒåƈ直接讉K—® make 属性,如清å?3所½Cºã€?


æ¸…å• 13. 实例åŒ?Automobile
public class AutomobileTest
{
   public void race()
   {
      Automobilecar1 = new Automobile();
      car1.make= "Austin Healy";
      car1.model= "Sprite";
      // ...
   }
}

现在ž®è£… make 属性。先高亮选中属性å¿UŽÍ¼Œç„¶åŽé€‰æ‹© Refactor > Encapsulate Fieldã€‚åœ¨å¼¹å‡ºçš„å¯¹è¯æ¡†ä¸­è¾“å…?getter å’?setter æ–ÒŽ³•çš„å¿U?#8212;—如您所料,¾~ºçœçš„æ–¹æ³•å¿U°åˆ†åˆ«æ˜¯ getMake() å’?setMake()。您也å¯ä»¥é€‰æ‹©ä¸Žè¿™ä¸ªå±žæ€§å¤„在åŒä¸€ä¸ªç±»ä¸­çš„æ–ÒŽ³•是ç‘ô¾l­ç›´æŽ¥è®¿é—®è¯¥å±žæ€§ï¼Œ˜q˜æ˜¯åƒå…¶ä»–类那样改用˜q™äº›è®‰K—®æ–ÒŽ³•。(有一些ähéžå¸¸å€‘֑于ä‹Éç”¨è¿™ä¸¤ç§æ–¹å¼çš„æŸä¸€¿U,ä¸è¿‡¼„°åéy在这¿U情况下您选择哪一¿Uæ–¹å¼éƒ½æ²¡æœ‰åŒºåˆ«åQŒå› ä¸?Automobile 中没有对 make 属性的引用。)

å›?. ž®è£…属æ€?/strong>
Encapsulating a field

点击 OK之åŽåQ?Automobile ¾cÖM¸­çš?make å±žæ€§å°±å˜æˆäº†ç§æœ‰å±žæ€§ï¼Œä¹ŸåŒæ—¶å…·æœ‰äº† getMake() å’?setMake() æ–ÒŽ³•ã€?

>


æ¸…å• 14. ¾lè¿‡é‡æž„çš?Automobile ¾c?/strong>
public class Automobile extends Vehicle
{
   private String make;
   public String model;
   public void setMake(String make)
   {
      this.make = make;
   }
   public String getMake()
   {
      return make;
   }
}

AutomobileTest ¾cÖM¹Ÿè¦è¿›è¡Œæ›´æ–ŽÍ¼Œä»¥ä¾¿ä½¿ç”¨æ–°çš„讉K—®æ–ÒŽ³•åQŒå¦‚清å•15所½Cºã€?


>æ¸…å• 15. AutomobileTest ¾c?/strong>
public class AutomobileTest
{
   public void race()
   {
      Automobilecar1 = new Automobile();
      car1.setMake("Austin Healy");
      car1.model= "Sprite";
      // ...
   }
}

æ”¹å˜æ–ÒŽ³•的签å?/span>

本文介ç»çš„æœ€åŽä¸€ä¸ªé‡æž„方法也是最难以使用的方法:Change Method SignatureåQˆæ”¹å˜æ–¹æ³•çš„½{‘ÖåQ‰ã€‚è¿™¿U方法的功能显而易è§?#8212;—æ”¹å˜æ–ÒŽ³•çš„å‚æ•°ã€å¯è§æ€§ä»¥åŠè¿”回值的¾cÕdž‹ã€‚而进行这æ ïLš„æ”¹å˜å¯¹äºŽè°ƒç”¨˜q™ä¸ªæ–ÒŽ³•的其他方法或者代ç ä¼šäº§ç”Ÿä»€ä¹ˆåª„å“,ž®×ƒ¸æ˜¯é‚£ä¹ˆæ˜¾è€Œæ˜“è§äº†ã€‚这么也没有什么魔æ–V€‚如果代ç çš„æ”¹å˜åœ¨è¢«é‡æž„的方法内部引å‘了问题——å˜é‡æœªå®šä¹‰ï¼Œæˆ–者类型ä¸åŒšw…——釿ž„æ“作ž®†å¯¹˜q™äº›é—®é¢˜˜q›è¡Œæ ‡è®°ã€‚您å¯ä»¥é€‰æ‹©æ˜¯æŽ¥å—釿ž„,½EåŽæ”ÒŽ­£˜q™äº›é—®é¢˜åQŒè¿˜æ˜¯å–æ¶ˆé‡æž„。如果这¿U釿ž„在其他的方法中引å‘问题åQŒå°±ç›´æŽ¥å¿½ç•¥˜q™äº›é—®é¢˜åQŒæ‚¨å¿…é¡»åœ¨é‡æž„之åŽäº²è‡ªä¿®æ”V€?/p>

为澄清这一点,考虑清å•16中列出的¾cÕd’Œæ–ÒŽ³•ã€?/p>
æ¸…å• 16. MethodSigExample ¾c?/strong>
public class MethodSigExample
{
   public int test(String s, int i)
   {
      int x = i + s.length();
      return x;
   }
}

上题q™ä¸ª¾cÖM¸­çš?test() æ–ÒŽ³•被å¦ä¸€ä¸ªç±»ä¸­çš„æ–ÒŽ³•调用åQŒå¦‚清å•17所½Cºã€?


æ¸…å• 17. callTest æ–ÒŽ³•
public void callTest()
   {
     MethodSigExample eg = new MethodSigExample();
     int r = eg.test("hello", 10);
   }

在第一个类中高亮选中 test åQŒç„¶åŽé€‰æ‹© Refactor > Change Method Signature。您ž®†çœ‹åˆ°å¦‚å›?所½Cºçš„å¯¹è¯æ¡†ã€?

�8. Change Method Signature 选项
Change Method Signature options

½W¬ä¸€ä¸ªé€‰é¡¹æ˜¯æ”¹å˜è¯¥æ–ÒŽ³•çš„å¯è§æ€§ã€‚在本例中,ž®†å…¶æ”¹å˜ä¸?protected 或è€?privateåQŒè¿™æ ïL¬¬äºŒä¸ª¾cÈš„ callTest() æ–ÒŽ³•ž®×ƒ¸èƒ½è®¿é—®è¿™ä¸ªæ–¹æ³•了。(如果˜q™ä¸¤ä¸ªç±»åœ¨ä¸åŒçš„包中åQŒå°†è®‰K—®æ–ÒŽ³•è®¾äØ“¾~ºçœå€ég¹Ÿä¼šå¼•赯‚¿™æ ïLš„问题。) Eclipse åœ¨è¿›è¡Œé‡æž„的时候ä¸ä¼šå°†˜q™äº›é—®é¢˜æ ‡å‡ºåQŒæ‚¨åªæœ‰è‡ªå·±é€‰æ‹©é€‚当的倹{€?

下é¢ä¸€ä¸ªé€‰é¡¹æ˜¯æ”¹å˜è¿”回值类型。如果将˜q”回值改ä¸?float åQŒè¿™ä¸ä¼šè¢«æ ‡è®°æˆé”™è¯¯åQŒå› ä¸?test() æ–ÒŽ³•˜q”回语å¥ä¸­çš„ int 会自动è{æ¢æˆ float 。å³ä¾¿å¦‚此,在第二个¾cÈš„ callTest() æ–ÒŽ³•ä¸­ä¹Ÿä¼šå¼•èµ·é—®é¢˜ï¼Œå› äØ“ float ä¸èƒ½è½¬æ¢æˆ?int 。您需è¦å°† test() 的返回值改ä¸?int åQŒæˆ–者是ž®?callTest() 中的 r æ”¹äØ“ float ã€?

如果ž®†ç¬¬ä¸€ä¸ªå‚æ•°çš„¾cÕdž‹ä»?String å˜æˆ int åQŒé‚£ä¹ˆä¹Ÿå¾—考虑相åŒçš„é—®é¢˜ã€‚åœ¨é‡æž„的过½E‹ä¸­˜q™äº›é—®é¢˜ž®†ä¼šè¢«æ ‡å‡ºï¼Œå› äØ“å®ƒä»¬ä¼šåœ¨è¢«é‡æž„çš„æ–ÒŽ³•内部引è“v问题åQ?int ä¸å…·æœ‰æ–¹æ³?length() ã€‚ç„¶è€Œå¦‚æžœå°†å…¶å˜æˆ?StringBuffer åQŒé—®é¢˜å°±ä¸ä¼šæ ‡è®°å‡ºæ¥åQŒå› ä¸?StringBuffer 的确å…ähœ‰æ–ÒŽ³• length() 。当然这会在 callTest() æ–ÒŽ³•ä¸­å¼•èµ·é—®é¢˜ï¼Œå› äØ“å®ƒåœ¨è°ƒç”¨ test() 的时候还是把一ä¸?String 传递进åŽÖMº†ã€?

å‰é¢æåˆ°˜q‡ï¼Œåœ¨é‡æž„引å‘了问题的情况下åQŒä¸½Ž¡é—®é¢˜æ˜¯å¦è¢«æ ‡å‡ºåQŒæ‚¨éƒ½å¯ä»¥ä¸€ä¸ªä¸€ä¸ªåœ°ä¿®æ­£˜q™äº›é—®é¢˜åQŒä»¥¾l§ç®‹ä¸‹åŽ»ã€‚è¿˜æœ‰ä¸€¿U方法,ž®±æ˜¯å…ˆè¡Œä¿®æ”¹˜q™äº›é”™è¯¯ã€‚如果您打算删除ä¸å†éœ€è¦çš„傿•° i åQŒé‚£ä¹ˆå¯ä»¥å…ˆä»Žè¦˜q›è¡Œé‡æž„çš„æ–¹æ³•ä¸­åˆ é™¤å¯¹å®ƒçš„å¼•ç”¨ã€‚è¿™æ ·åˆ é™¤å‚æ•°çš„˜q‡ç¨‹ž®±æ›´åŠ é¡ºåˆ©äº†ã€?

最åŽä¸€ä»‰™œ€è¦è§£é‡Šçš„事情æ˜?Default Value 选项。这一选项å€ég»…é€‚ç”¨äºŽå°†å‚æ•°åŠ å…¥æ–ÒŽ³•½{‘Ö中的情况。比方说åQŒå¦‚æžœæˆ‘ä»¬åŠ å…¥äº†ä¸€ä¸ªç±»åž‹äØ“ String çš„å‚æ•ŽÍ¼Œå‚æ•°å䨓 n åQŒå…¶¾~ºçœå€égØ“ world åQŒé‚£ä¹ˆåœ¨ callTest() æ–ÒŽ³•中调ç”?test() 的代ç å°±å˜æˆä¸‹é¢çš„æ ·å­ï¼š

      
         public void callTest()
   {
      MethodSigExample eg = new MethodSigExample();
      int r = eg.test("hello", 10, "world");
   }

在这场有å…?Change Method Signature 釿ž„çš„çœ‹ä¼¼å¯æ€•的讨论中,我们òq¶æ²¡æœ‰éšè—其中的问题åQŒä½†å´ä¸€ç›´æ²¡æœ‰æåˆŽÍ¼Œ˜q™ç§é‡æž„其实是éžå¸¸å¼ºå¤§çš„工具åQŒå®ƒå¯ä»¥èŠ‚çº¦å¾ˆå¤šæ—‰™—´åQŒé€šå¸¸æ‚¨å¿…™å»è¿›è¡Œä»”¾l†çš„计划æ‰èƒ½æˆåŠŸåœîC‹É用它ã€?/p>

]]>
解决åQšEclipseå¯åЍtomcat 讉K—®ä¸äº† 手动å¯åЍå¯ä»¥è®‰K—®http://www.aygfsteel.com/apple0668/archive/2011/05/09/349875.htmlapple0668apple0668Mon, 09 May 2011 14:21:00 GMThttp://www.aygfsteel.com/apple0668/archive/2011/05/09/349875.htmlhttp://www.aygfsteel.com/apple0668/comments/349875.htmlhttp://www.aygfsteel.com/apple0668/archive/2011/05/09/349875.html#Feedback0http://www.aygfsteel.com/apple0668/comments/commentRss/349875.htmlhttp://www.aygfsteel.com/apple0668/services/trackbacks/349875.htmlhttp://localhost:8080讉K—®ä¸åˆ°ã€?br /> 解决办法åQšåœ¨server视图上é¢åQŒåŒå‡»tomcat v6.0åQŒæ‰“å¼€é…ç½®½H—å£åQŒåœ¨server location中默认是选中“use workspace metadata(does not modify tomcat instation)”åQŒæ”¹æˆé€‰ä¸­½W¬äºŒ™å?#8220;use tomcat installation” æœåŠ¡restartå›_¯æ­£å¸¸è®‰K—®ã€?img src ="http://www.aygfsteel.com/apple0668/aggbug/349875.html" width = "1" height = "1" />

]]>
IntelliJ Idea10 常用快æ·é”?/title><link>http://www.aygfsteel.com/apple0668/archive/2011/05/04/349503.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Wed, 04 May 2011 08:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/apple0668/archive/2011/05/04/349503.html</guid><wfw:comment>http://www.aygfsteel.com/apple0668/comments/349503.html</wfw:comment><comments>http://www.aygfsteel.com/apple0668/archive/2011/05/04/349503.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/apple0668/comments/commentRss/349503.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/apple0668/services/trackbacks/349503.html</trackback:ping><description><![CDATA[习惯了eclipseå¿«æ·é”®ï¼Œæœ€˜q‘用IntelliJ Idea,å¿«æ·é”®å®Œå…¨ä¸ä¸€æ øP¼Œè®îC¸‹ä¾›ä»¥åŽå‚考ä‹É用ã€?br /> å¿«æ·é”®å¦‚下:<br /> <br /> <font style="background-color: #cce8cf">ä»£ç æç¤º KEYMAP->Main menu->Code->Complete Code->Basic 讄¡½®å¿«æ·é”®ALT+Z 原是ctrl+½Iºæ ¼åQˆSPACEåQ?br />                   KEYMAP->Main menu->Code->Generate 讄¡½®å¿«æ·é”®ALT+Insert 原是AlT+Shift+S Alt+回èžR 导入åŒ?<br /> 自动修正 Ctrl+N 查找¾c?<br /> Ctrl+Shift+N 查找文äšg <br /> Ctrl+Alt+L æ ¼å¼åŒ–代ç ?<br /> Ctrl+Alt+O 优化导入的类和包 <br /> Alt+Insert 生æˆä»£ç (如get,setæ–ÒŽ³•,构造函数等) <br /> Ctrl+E或者Alt+Shift+C 最˜q‘æ›´æ”¹çš„ä»£ç  <br /> Ctrl+R æ›¿æ¢æ–‡æœ¬ <br /> Ctrl+F 查找文本 <br /> Ctrl+Shift+Space è‡ªåŠ¨è¡¥å…¨ä»£ç  <br /> Ctrl+½Iºæ ¼ ä»£ç æç¤º <br /> Ctrl+Alt+Space ¾cÕd或接å£åæç¤º <br /> Ctrl+P æ–ÒŽ³•傿•°æç¤º <br /> Ctrl+Shift+Alt+N 查找¾cÖM¸­çš„æ–¹æ³•或å˜é‡ <br /> Alt+Shift+C å¯Òޝ”最˜q‘ä¿®æ”¹çš„ä»£ç  <br /> Shift+F6 釿ž„-é‡å‘½å?<br /> Ctrl+Shift+先上é”?<br /> Ctrl+X 删除è¡?<br /> Ctrl+D å¤åˆ¶è¡?<br /> Ctrl+/ æˆ?Ctrl+Shift+/ 注释åQ?/ 或è€?*...*/ åQ?<br /> Ctrl+J è‡ªåŠ¨ä»£ç  <br /> Ctrl+E 最˜q‘打开的文ä»?<br /> Ctrl+H 昄¡¤º¾cÈ»“构图 <br /> Ctrl+Q 昄¡¤ºæ³¨é‡Šæ–‡æ¡£ <br /> Alt+1 快速打开或éšè—å·¥½E‹é¢æ?<br /> Alt+F1 æŸ¥æ‰¾ä»£ç æ‰€åœ¨ä½¾|?<br /> Alt+ left/right 切æ¢ä»£ç è§†å›¾ <br /> Alt+ Up/Down 在方法间快速移动定ä½?<br /> Ctrl+Alt+ left/right ˜q”回至上‹Æ¡æµè§ˆçš„ä½ç½® <br /> Ctrl+Shift+Up/Down 代ç å‘上/下移动ã€?<br /> F2 或Shift+F2 高亮错误或警告快速定ä½?ä»£ç æ ‡ç­¾è¾“入完æˆåŽï¼ŒæŒ‰TabåQŒç”Ÿæˆä»£ç ã€?如输å…?sout",冿Œ‰ä¸‹Tab键,ž®±å¯ä»¥è‡ªåŠ¨ç”ŸæˆSystem.out.println(); 选中文本åQŒæŒ‰Ctrl+Shift+F7 åQŒé«˜äº®æ˜¾½Cºæ‰€æœ‰è¯¥æ–‡æœ¬åQŒæŒ‰Esc高亮消失ã€?<br /> Ctrl+W 选中代ç åQŒè¿ž¾l­æŒ‰ä¼šæœ‰å…¶ä»–效果选中文本åQŒæŒ‰Alt+F3 åQŒé€ä¸ªå¾€ä¸‹æŸ¥æ‰„¡›¸åŒæ–‡æœ¬ï¼Œòq‰™«˜äº®æ˜¾½Cºã€?<br /> Ctrl+Up/Down 光标跌™{到第一行或最åŽä¸€è¡Œä¸‹ Ctrl+B 快速打开光标处的¾cÀLˆ–æ–ÒŽ³•</font><img src ="http://www.aygfsteel.com/apple0668/aggbug/349503.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/apple0668/" target="_blank">apple0668</a> 2011-05-04 16:09 <a href="http://www.aygfsteel.com/apple0668/archive/2011/05/04/349503.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>eclipse æ’äšgProperties Editorhttp://www.aygfsteel.com/apple0668/archive/2007/10/03/150241.htmlapple0668apple0668Wed, 03 Oct 2007 02:18:00 GMThttp://www.aygfsteel.com/apple0668/archive/2007/10/03/150241.htmlhttp://www.aygfsteel.com/apple0668/comments/150241.htmlhttp://www.aygfsteel.com/apple0668/archive/2007/10/03/150241.html#Feedback0http://www.aygfsteel.com/apple0668/comments/commentRss/150241.htmlhttp://www.aygfsteel.com/apple0668/services/trackbacks/150241.html阅读全文

]]>
eclipse下ä‹É用泛型é‡åˆ°é—®é¢˜è§£å†›_Šžæ³?/title><link>http://www.aygfsteel.com/apple0668/archive/2007/09/17/145830.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Mon, 17 Sep 2007 05:50:00 GMT</pubDate><guid>http://www.aygfsteel.com/apple0668/archive/2007/09/17/145830.html</guid><wfw:comment>http://www.aygfsteel.com/apple0668/comments/145830.html</wfw:comment><comments>http://www.aygfsteel.com/apple0668/archive/2007/09/17/145830.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/apple0668/comments/commentRss/145830.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/apple0668/services/trackbacks/145830.html</trackback:ping><description><![CDATA[     摘è¦: eclipse 3.2中ä‹É用java的泛型é‡åˆ°é—®é¢˜ï¼Œè§£å†³æ‰‹è®°ã€?nbsp; <a href='http://www.aygfsteel.com/apple0668/archive/2007/09/17/145830.html'>阅读全文</a><img src ="http://www.aygfsteel.com/apple0668/aggbug/145830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/apple0668/" target="_blank">apple0668</a> 2007-09-17 13:50 <a href="http://www.aygfsteel.com/apple0668/archive/2007/09/17/145830.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>在eclipse3.3中快æ·é”®é—®é¢˜è§£å†³æ–ÒŽ³•http://www.aygfsteel.com/apple0668/archive/2007/09/16/145584.htmlapple0668apple0668Sun, 16 Sep 2007 12:43:00 GMThttp://www.aygfsteel.com/apple0668/archive/2007/09/16/145584.htmlhttp://www.aygfsteel.com/apple0668/comments/145584.htmlhttp://www.aygfsteel.com/apple0668/archive/2007/09/16/145584.html#Feedback2http://www.aygfsteel.com/apple0668/comments/commentRss/145584.htmlhttp://www.aygfsteel.com/apple0668/services/trackbacks/145584.html阅读全文

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º °ºÈÊÏØ| ÄÇÆÂÏØ| ËÕÄáÌØ×óÆì| ½¨Ê¼ÏØ| µü²¿ÏØ| Öñ±±ÊÐ| ÓÎÏ·| ¾²ÀÖÏØ| °²Í¼ÏØ| çõ´ºÊÐ| ¶Ø»¯ÊÐ| ƽÁ¹ÊÐ| Ë«ÇÅÇø| º×¸ÚÊÐ| ʯÁÖ| Ç±É½ÏØ| ƽºÍÏØ| ÓÀºÍÏØ| ÐËÈÊÏØ| ãÉÐÐÇø| ¾ÅÁúÆÂÇø| Íß·¿µêÊÐ| ÑôÐÂÏØ| ½ðËþÏØ| Ïî³ÇÊÐ| ½õÆÁÏØ| ·áÌ¨Çø| ÁÙ³ÇÏØ| ¶«ÁÉÏØ| ÇåÁ÷ÏØ| ʯ³ÇÏØ| ºìÔ­ÏØ| ʯÃÞÏØ| ×Ô¹±ÊÐ| ¶«°²ÏØ| ¹®ÒåÊÐ| Æß̨ºÓÊÐ| ½ºÄÏÊÐ| ̨ÖÐÏØ| ºÏË®ÏØ| »¸Ì¨ÏØ|