| ÎÒ´ÓÊÂJDK 5.0´úÂëµÄ±àд¹¤×÷ÒѾÓÐÁù¸öÔÂÖ®¾ÃÁË£¬ÎÒÈÏΪÓбØÒª»¨Ò»µãʱ¼ä»Ø¹ËÒ»ÏÂÎҵıàÂë¾Ñ飬¶Ô¸ÃÈí¼þËù½éÉܵŦÄܽøÐÐ×ܽᡣ
ÔöÇ¿µÄforÑ»·
¡¡¡¡×÷ΪÎÞ¿ÉÕùÒéµÄÙø¼Ò£¬ÐµÄforÑ»·ÎÞÂÛÔں䦣¨¼¸ºõÔÚÈκεط½£©¶¼·Ç³£ºÃÓã¬Òò´ËÎÒ¼¤¶¯µÃ²»ÖªÈçºÎ¿ªÊ¼ÃèÊö¡£µ±ÎÒ±»ÆÈʹÓþÉʽforÑ»·µÄʱºò£¬ÌرðÊÇÐèҪʹÓÃË÷Òý»òÐèÒªÈõü´ú³ÌÐòÔÚÑ»·Ö®Íâ¿É¼ûµÄʱºò£¬ÎÒµÄÄÚÐÄÉî´¦ÂÅÂÅηËõ¡£
¡¡¡¡´úÂë¾ßÓкܺõĿɶÁÐÔ£¬²¢ÇÒ¸øÈ˵ĸоõÒ»µãÒ²²»·±ÔÓ£¨ÀýÈ磬Ë÷Òý²»ÐèÒªµÄ´úÂë»òÔöÁ¿¹«¿ª»ù´¡ÊµÏÖ£©¡£ºóÃæÒ»µãÊÇÐÂÑ»·µÄÒâÍâÊÕ»ñ¡£ÊÔÏëһϣ¬ÓÐÈçÏ´úÂ룺
String[] names = ...;
for (String name :names) {
// ...
}
¡¡¡¡Äú¾ö¶¨°ÑÃû³ÆÀàÐ͸ÄΪCollection¡£ÈçºÎÐ޸ĴúÂ룿
List names = ...;
for (String name : names) {
// ...
}
¡¡¡¡½öÐÞ¸ÄÒ»ÐоͿÉÒÔÁË¡£Õâ¾ÍÊÇËüµÄ¶ÀÌØÓŵ㡣
×¢ÊÍ
¡¡¡¡ÏÔÈ»£¬ÎÒ¶Ô×¢Ê͵ÄÁ˽⻹¾ßÓÐÒ»¶¨¾ÖÏÞÐÔ£¬ÒòΪËüÃÇλÓÚTestNGµÄºËÐÄλÖ㻵«ÊÇ£¬ÎÒ¼áÐÅ×¢ÊÍÐн«¸Ä±äÎÒÃÇʹÓÃJava¹¹½¨Èí¼þµÄ·½Ê½¡£³¤ÆÚÒÔÀ´£¬ÎÒÃÇÔÚ³ÌÐòÖÐÒýÈëÔªÊý¾ÝÒ»Ö±ÒÀ¿¿µÄÊǶԺڿÍ×ö³öµÄ·´Ó¦£¬×¢ÊÍ×îÖÕ½«¶Ô´ËÎÊÌâÌṩ׿ԽµÄ½â¾ö·½°¸¡£
¡¡¡¡´ËÍ⣬ÎÒÓÐÒ»¸ö¸Ð¾õ£¬¾ÍÊÇʹÓÃijЩԤ¶¨ÒåµÄ×¢ÊÍ£¨Èç@Override£©ÊÇûÓбØÒªµÄ£¬ËùÒÔÔÚÕâÒ»µãÉÏÎÒһֱûÓÐÐγÉ×Ô¼ºµÄÒâ¼û¡£
¡¡¡¡ÔÚδÀ´µÄÈô¸ÉÄêÀ¶ÔÎÒÀ´ËµÒ»¸öÎÞ·¨ÌӱܵÄÏÖʵÊÇ£¬ÎÒÃÇÔĶÁºÍ±àдµÄ´ó¶àÊýJava´úÂë¶¼½«°üº¬×¢ÊÍ¡£
¾²Ì¬µ¼Èë
¡¡¡¡³ýÁËÔÚRetention ºÍ TargetÀàÐÍÖУ¬ÎÒ¼¸ºõ²»Ê¹ÓÃËüÃÇ¡£ÖÁ½ñ»¹Ã»ÓÐÈËÄÜ˵·þÎÒ£¬Ìí¼Ó´Ë¹¦Äܵı¾À´Òâͼ£¨×èֹʵÏֽӿڵķ´Ä£Ê½£¬ÇÒÎÞÐèÏÞ¶¨¾ÍÄÜÖØÓÃÆä³£Á¿£©Ö¤Ã÷Ó¦¸ÃÒýÈëеÄÓïÑÔ¹¦ÄÜ£¬ÕâÒªÈÃʱ¼ä˵»°¡£
¡¡¡¡ÎÒ²ÂÏ룬´ÓijЩ·½ÃæÀ´Ëµ£¬ÔÚÎÒÈÕ³£±à³ÌÖÐʹÓõÄIDEÍêÈ«·ÏÆúÁ˵¼È빦ÄÜ£¬ËùÒÔÎÒ¶ÔÕâÒ»¹¦ÄÜÒѾûÓÐʲô¸Ð¾õÁË¡£
¿É±ä³¤¶È²ÎÊý
¡¡¡¡Æù½ñΪֹ£¬ÎÒ´ÓÀ´²»ÐèÒª´Ë¹¦ÄÜ¡£ÓÐʱËü¿ÉÄÜÓÃÆðÀ´ºÜ·½±ã£¬µ«ÊÇÎÒÕæµÄ²»ÏàÐÅÕâÖÖ¹¦ÄÜÈ·±£ÓïÑÔÖеĸıäÊÇÕýÈ·µÄ¡£
Enum
¡¡¡¡ÀíÂÛÉÏ£¬ÎÒ¶ÔEnum³Ö¿Ï¶¨µÄ̬¶È£¬µ«ÊÇÎÒ»¹Ã»ÓÐÕæÕý°ÑÎҵĴúÂëת»»ÎªEnum£¬ËùÒÔÎÒ²»Á˽âËüÃǵÄʹÓÃЧ¹û¡£ÎÒÏàÐÅÈç¹ûʹÓÃËüÃÇЧ¹û»áºÜºÃ£¬½«Ê¹´úÂë¸ü¼Ó½¡×³¡£
Generic
¡¡¡¡°Ñ×îºÃµÄÁôµ½×îºó……µ«ÊÇÒòΪ±¾ÌõÄ¿Óе㳤£¬ÎÒ½«°Ñ¶ÔGenericµÄÌÖÂÛÁô×÷Ã÷ÌìµÄ»°Ìâ¡£
Autoboxing
¡¡¡¡µ½Ä¿Ç°ÎªÖ¹£¬ÎÒ»¹´ÓÀ´Ã»ÓÐʹÓùýautoboxing¹¦ÄÜ£¬ÒòΪÎÒ¶ÔÓÚ´úÂëÐÔÄÜʧȥ¿ØÖÆÃ»ÓÐÃ÷È·µÄ¸Ð¾õ¡£¾¡¹ÜautoboxingÊÇÒ»ÖÖδ¾Ö¤Ã÷µÄ¹¦ÄÜ£¬ËüÓÃÆðÀ´·½±ã£¬²¢ÇÒ¿ÉÒÔÈôúÂë¸ü¾ßÓпɶÁÐÔ¡£ÎÒÏëÎÒÓ¦¸Ã¹ÄÀø¿ª·¢ÈËÔ±ÔÚʹÓÃautoboxingʱΪ´úÂë×öÉϱê¼Ç£»ÎҸҿ϶¨IDEµÄ¿ª·¢ÈËÔ±²»¾ÃÒ²»áÕâÑù×ö¡£
Generic
¡¡ËµÔÚÇ°ÃæµÄ»°¡£
¡¡¡¡Ê×ÏÈ£¬ÎÞ¿ÉÖÃÒÉ£¬GenericÊÇÒ»¸ö¿ÉÄÜʹ´úÂë¸ü¼Ó½¡×³µÄ¿É¿¿¸ÅÄî¡£ÒòΪËü¾ßÓпÉÖ´ÐÐÐÔ£¬ËùÒÔͨ³£Å׿ª¾ßÌåÓïÑÔ¶ÔÆä½øÐÐÌÖÂÛ¡£¶àÄêÀ´×÷ΪC++ίԱ»áµÄ³ÉÔ±£¬ÎÒÇå³þµØ¸Ð¾õµ½ÕýȷʹÓÃËüÃǾö·ÇÒ×Ê¡£
¡¡¡¡¼òÑÔÖ®£¬¶ÔJava genericsÎÒÓÃÏÂÃæµÄ»°À´½øÐÐ˵Ã÷£º´úÂë±ÈÒÔǰ½¡×³£¬µ«¸ü¼ÓÄÑÒÔÔĶÁ¡£
¡¡¡¡ÄÇô£¬ÎÊÌâºÎÔÚ£¿
¡¡¡¡ÈßÓà¡£
¡¡¡¡Ê×ÏÈ£¬°ÑÒ»°ãµÄÇ¿ÖÆ×ª»»ÐèÇóÒýÈëÈßÓ࣬¶Ô´ËÎÊÌâÎҸоõºÜ¼¬ÊÖ¡£ÀýÈ磬Ϊʲô²»Äܲ»±àд£º
Map accounts = new HashMap(); // no generics
...
Account a = (Account) accounts.get("Cedric");
¡¡¡¡¶ø±àд£º
Map m = new HashMap(); // no generics
...
Account a = m.get("Cedric");
¡¡¡¡À´´úÌæ£¬Í¬Ê±ÈñàÒëÆ÷ÒýÈëÒ»ÖÖ¾²Ä¬Ç¿ÖÆ×ª»»Ä£Ê½£¿ÒòΪºÜÏÔÈ»£¬ËüÊÇÒ»¸öÎÒÊÔͼ´ÓMapÖмìË÷µÄAccountÀàÐ͵ĶÔÏó¡£
¡¡¡¡ÏÔÈ»£¬Generic²»ÄÜÍêÈ«½â¾öÕâ¸öÎÊÌ⣬ֻÊÇÔÚÒ»¶¨³Ì¶ÈÉÏÓаïÖú¶øÒÑ¡£¿ÉÊÇ£¬ÔÚÁíÍâһЩ·½Ã棬ËüÃÇÈ´Óк¦ÎÞÒæ£º
Map<String, List<Account>> accounts =
new HashMap<String, List<Account>>();
¡¡¡¡àË£¡
¡¡¡¡¸Ã´úÂë²»½öÄÑÒÔÔĶÁ£¬¶øÇÒ»¹Î´ÄÜ×ñÊØDRY£¨Don't repeat yourself£©×¼Ôò¡£Èç¹ûÎÒÐèÒªÔÚÁбí<Account> Collection<Account>Öиü¸Ä´ËÓ³ÉäµÄÖµÀàÐÍ£¬½«»á·¢ÉúʲôÊ£¿ÎÒÐèÒªÌæ»»´úÂëÖеÄËùÓеĴËÀàÉùÃ÷¡£¾¡¹ÜIDEÖØ¹¹¶Ô´ËÓÐËù°ïÖú£¬ÈÔÈ»ÐèÒª¶ÔÏ൱¶àµÄ´úÂë½øÐÐÐ޸쬴ËÀàÐÞ¸ÄÉõÖÁÓпÉÄܶԴúÂëµÄÓïÒå²úÉúÒ»¶¨Ó°Ïì¡£
¡¡¡¡ÊÂʵÉÏ£¬´´½¨Ð¶ÔÏóʱûÓÐʲôºÃ°ì·¨¿ÉÒÔ±ÜÃâ¸ÃÓï·¨£¬µ«ÊÇÎÒҪ˵µÄÊÇ£¬Èç¹û½«typedefºÍGenericÒ»ÆðÒýÈ룬Çé¿ö»áºÃµÄ¶à¡£
¡¡¡¡ÎÒ×î³õÊÇÕâÖֹ۵㡣
¡¡¡¡µ«ÊÇ£¬Ëæ×ÅÈÏʶµÄ¼ÓÉÎÒ·¢ÏÖʹÓÃtypedef½â¾öÎÊÌâÊÇÒ»¸ö´íÎóµÄ½â¾ö·½°¸£¬ÒòΪ¿¿¼òµ¥Ìí¼ÓµÄ·½Ê½¶ÔʹÓõ¥¶ÀÀඨÒ帴ÔÓGenericÀàÐÍûÓÐÈκÎ×÷Óá£
class AccountMap extends HashMap<String, List&lAccount>> {
...
}
¡¡¡¡³ýÈ¥À©Õ¹ÊµÏÖ£¨ºÜÏÔÈ»ÊÇHashMap¶ø²»ÊÇMap£©ÕâÖÖÇé¿ö£¬¸Ã½â¾ö·½°¸¿ÉÄܱÈÒýÈëtypedefºÃһЩ£¬ÒòΪtypedefÓÐÆä×ÔÉíµÄȱÏÝ¡£
¡¡¡¡Æù½ñÎÒ»¹Ã»ÓÐÓöµ½ÕâÖÖÂé·³£¬µ«ÎҵĽ¨ÒéÊÇ£ºÈç¹û±àд¸ÃÀàÐÍÈý´Î£¨³õʼ»¯Á½´Î£¬ÔÚ´úÂëÖÐʹÓÃÒ»´ÎÒÔÉÏ£©ÒÔÉÏ£¬ÔòʹÓÃËü¡£
¡¡¡¡³ý´ËȱµãÍ⣬×ÜÌåÀ´ËµÎÒ»¹ÊÇÏ൱ϲ»¶GenericsµÄ£¬¶øÇÒÓÈÆäϲ»¶ÔĶÁ±àдµÄ·Ç³£ºÃµÄTestNG Javadocs¡£
½áÊøÓï
¡¡¡¡¶ÔÓÚJDK 5.0µÄÐÂÌØÐÔÎҷdz£ÂúÒâ¡£ÎÒÓÐÐÒ²ÎÓëÁËJSR 175ºÍJSR 201£¬´Ó¶øÓлú»á¶Ô¿ª·¢JDK 5.0µÄÐÂÌØÐÔ×÷³öÁË×Ô¼ºµÄ¹±Ïס£Í¬ËùÓиù±¾ÐԵıä¸ïÒ»Ñù£¬²»ÊÇËùÓеÄÐÂÌØÐÔ¶¼Êܵ½´ó¼ÒµÄ»¶Ó£¬µ«Ëæ×Å´ó¶àÊý¿ª·¢ÈËÔ±·¢ÏÖÆäÖÐÄ³Ð©ÌØÐԷdz£ÓÐÓ㬲¢ÇÒ»¹±£ÁôÁËÏòºó¼æÈÝÐÔ£¬ÎÒÈÏΪJDK 5.0Ïò¿ª·¢¸ü¶à½¡×³µÄJava´úÂëÂõ³öÁ˼ᶨµÄÒ»²½¡£¡¡
¹ØÓÚ×÷Õß
Cedric BeustµÄµç×ÓÓÊÏ䣺cedric@beust.com
²©¿Í£ºhttp://www.beust.com/weblog/
¡¡¡¡Cedric BeustÊÇWebLogic ServerÍŶӵĸ߼¶Èí¼þ¿ª·¢ÈËÔ±£¬ËûÔÚÆä²©¿ÍOtakuÖÐÌá³öÁËJ2EE¡¢Java¡¢AOPºÍÈí¼þ¿ª·¢µÈ·½ÃæµÄ¼û½â¡£ |