·ºÐÍ»ù´¡
·ºÐÍÊǶÔJavaÓïÑÔÀàÐÍϵͳµÄÒ»ÖÖÀ©Õ¹£¬ÓеãÀàËÆÓÚC++µÄÄ£°å£¬¿ÉÒÔ°ÑÀàÐͲÎÊý¿´×÷ÊÇʹÓòÎÊý»¯ÀàÐÍʱָ¶¨µÄÀàÐ͵ÄÒ»¸öռλ·û¡£ÒýÈë·ºÐÍ£¬ÊǶÔJavaÓïÑÔÒ»¸ö½Ï´óµÄ¹¦ÄÜÔöÇ¿£¬´øÀ´Á˺ܶàµÄºÃ´¦£º
ÀàÐͰ²È«¡£ÀàÐÍ´íÎóÏÖÔÚÔÚ±àÒëÆÚ¼ä¾Í±»²¶»ñµ½ÁË£¬¶ø²»ÊÇÔÚÔËÐÐʱµ±×÷java.lang.ClassCastExceptionչʾ³öÀ´£¬½«ÀàÐͼì²é´ÓÔËÐÐʱŲµ½±àÒëʱÓÐÖúÓÚ¿ª·¢Õ߸üÈÝÒ×ÕÒµ½´íÎ󣬲¢Ìá¸ß³ÌÐòµÄ¿É¿¿ÐÔ
Ïû³ýÁË´úÂëÖÐÐí¶àµÄÇ¿ÖÆÀàÐÍת»»£¬ÔöÇ¿ÁË´úÂëµÄ¿É¶ÁÐÔ
Ϊ½Ï´óµÄÓÅ»¯´øÀ´ÁË¿ÉÄÜ
·ºÐÍÊÇʲô²¢²»»á¶ÔÒ»¸ö¶ÔÏóʵÀýÊÇʲôÀàÐ͵ÄÔì³ÉÓ°Ï죬ËùÒÔ£¬Í¨¹ý¸Ä±ä·ºÐ͵ķ½Ê½ÊÔͼ¶¨Ò岻ͬµÄÖØÔØ·½·¨ÊDz»¿ÉÒԵġ£Ê£ÏµÄÄÚÈÝÎÒ²»»á¶Ô·ºÐ͵ÄʹÓÃ×ö¹ý¶àµÄ½²Êö£¬·ºÐ͵ÄͨÅä·ûµÈ֪ʶÇë×ÔÐвéÔÄ¡£

ÔÚ½øÈëÏÂÃæµÄÂÛÊö֮ǰÎÒÏëÏÈÎʼ¸¸öÎÊÌ⣺
¶¨ÒåÒ»¸ö·ºÐÍÀà×îºóµ½µ×»áÉú³É¼¸¸öÀ࣬±ÈÈçArrayList<T>µ½µ×Óм¸¸öÀà
¶¨ÒåÒ»¸ö·ºÐÍ·½·¨×îÖÕ»áÓм¸¸ö·½·¨ÔÚclassÎļþÖÐ
Ϊʲô·ºÐͲÎÊý²»ÄÜÊÇ»ù±¾ÀàÐÍÄØ
ArrayList<Integer>ÊÇÒ»¸öÀàÂð
ArrayList<Integer>ºÍList<Integer>ºÍArrayList<Number>ºÍList<Number>ÊÇʲô¹ØÏµÄØ£¬Õ⼸¸öÀàÐ͵ÄÒýÓÃÄÜÏ໥¸³ÖµÂð
ÀàÐͲÁ³ý
ÕýÈ·Àí½â·ºÐ͸ÅÄîµÄÊ×ҪǰÌáÊÇÀí½âÀàÐͲÁ³ý£¨type erasure£©¡£ JavaÖеķºÐÍ»ù±¾É϶¼ÊÇÔÚ±àÒëÆ÷Õâ¸ö²ã´ÎÀ´ÊµÏֵġ£ÔÚÉú³ÉµÄJava×Ö½Ú´úÂëÖÐÊDz»°üº¬·ºÐÍÖеÄÀàÐÍÐÅÏ¢µÄ¡£Ê¹Ó÷ºÐ͵Äʱºò¼ÓÉϵÄÀàÐͲÎÊý£¬»á±»±àÒëÆ÷ÔÚ±àÒëµÄʱºòÈ¥µô¡£Õâ¸ö¹ý³Ì¾Í³ÆÎªÀàÐͲÁ³ý¡£ÈçÔÚ´úÂëÖж¨ÒåµÄList<Object>ºÍList<String>µÈÀàÐÍ£¬ÔÚ±àÒëÖ®ºó¶¼»á±ä³ÉList¡£JVM¿´µ½µÄÖ»ÊÇList£¬¶øÓÉ·ºÐ͸½¼ÓµÄÀàÐÍÐÅÏ¢¶ÔJVMÀ´ËµÊDz»¿É¼ûµÄ¡£Java±àÒëÆ÷»áÔÚ±àÒëʱ¾¡¿ÉÄܵķ¢ÏÖ¿ÉÄܳö´íµÄµØ·½£¬µ«ÊÇÈÔÈ»ÎÞ·¨±ÜÃâÔÚÔËÐÐʱ¿Ì³öÏÖÀàÐÍת»»Òì³£µÄÇé¿ö¡£ÀàÐͲÁ³ýÒ²ÊÇJavaµÄ·ºÐÍʵÏÖ·½Ê½ÓëC++Ä£°å»úÖÆÊµÏÖ·½Ê½Ö®¼äµÄÖØÒªÇø±ð¡£
ºÜ¶à·ºÐÍµÄÆæ¹ÖÌØÐÔ¶¼ÓëÕâ¸öÀàÐͲÁ³ýµÄ´æÔÚÓйأ¬°üÀ¨£º
·ºÐÍÀಢûÓÐ×Ô¼º¶ÀÓеÄClassÀà¶ÔÏó¡£±ÈÈç²¢²»´æÔÚList<String>.class»òÊÇList<Integer>.class£¬¶øÖ»ÓÐList.class¡£
¾²Ì¬±äÁ¿ÊDZ»·ºÐÍÀàµÄËùÓÐʵÀýËù¹²ÏíµÄ¡£¶ÔÓÚÉùÃ÷ΪMyClass<T>µÄÀ࣬·ÃÎÊÆäÖеľ²Ì¬±äÁ¿µÄ·½·¨ÈÔÈ»ÊÇ
MyClass.myStaticVar¡£²»¹ÜÊÇͨ¹ýnew MyClass<String>»¹ÊÇnew
MyClass<Integer>´´½¨µÄ¶ÔÏ󣬶¼Êǹ²ÏíÒ»¸ö¾²Ì¬±äÁ¿¡£
·ºÐ͵ÄÀàÐͲÎÊý²»ÄÜÓÃÔÚJavaÒì³£´¦ÀíµÄcatchÓï¾äÖС£ÒòΪÒì³£´¦ÀíÊÇÓÉJVMÔÚÔËÐÐʱ¿ÌÀ´½øÐеġ£ÓÉÓÚÀàÐÍÐÅÏ¢±»²Á³ý£¬JVMÊÇÎÞ·¨Çø·ÖÁ½¸öÒì³£ÀàÐÍMyException<String>ºÍMyException<Integer>µÄ¡£¶ÔÓÚJVMÀ´Ëµ£¬ËüÃǶ¼ÊÇ
MyExceptionÀàÐ͵ġ£Ò²¾ÍÎÞ·¨Ö´ÐÐÓëÒì³£¶ÔÓ¦µÄcatchÓï¾ä¡£
ÀàÐͲÁ³ýµÄ»ù±¾¹ý³ÌÒ²±È½Ï¼òµ¥£¬Ê×ÏÈÊÇÕÒµ½ÓÃÀ´Ìæ»»ÀàÐͲÎÊýµÄ¾ßÌåÀà¡£Õâ¸ö¾ßÌåÀàÒ»°ãÊÇObject¡£Èç¹ûÖ¸¶¨ÁËÀàÐͲÎÊýµÄÉϽçµÄ»°£¬ÔòʹÓÃÕâ¸öÉϽ硣°Ñ´úÂëÖеÄÀàÐͲÎÊý¶¼Ìæ»»³É¾ßÌåµÄÀࡣͬʱȥµô³öÏÖµÄÀàÐÍÉùÃ÷£¬¼´È¥µô<>µÄÄÚÈÝ¡£±ÈÈçT
get()·½·¨ÉùÃ÷¾Í±ä³ÉÁËObject get()£»List<String>¾Í±ä³ÉÁËList¡£
·ºÐ͵ÄʵÏÖÔÀí
ÒòΪÖÖÖÖÔÒò£¬Java²»ÄÜʵÏÖÕæÕýµÄ·ºÐÍ£¬Ö»ÄÜʹÓÃÀàÐͲÁ³ýÀ´ÊµÏÖα·ºÐÍ£¬ÕâÑùËäÈ»²»»áÓÐÀàÐÍÅòÕÍ£¨C++Ä£°åÁîÈËÀ§ÈŵÄÄÑÌ⣩µÄÎÊÌ⣬µ«ÊÇÒ²ÒýÆðÁËÐí¶àеÄÎÊÌâ¡£ËùÒÔ£¬Sun¶ÔÕâЩÎÊÌâ×÷³öÁËÐí¶àÏÞÖÆ£¬±ÜÃâÎÒÃÇ·¸¸÷ÖÖ´íÎó¡£
±£Ö¤ÀàÐͰ²È«
Ê×ÏȵÚÒ»¸öÊÇ·ºÐÍËùÐû³ÆµÄÀàÐͰ²È«£¬¼ÈÈ»ÀàÐͲÁ³ýÁË£¬ÈçºÎ±£Ö¤ÎÒÃÇÖ»ÄÜʹÓ÷ºÐͱäÁ¿ÏÞ¶¨µÄÀàÐÍÄØ£¿java±àÒëÆ÷ÊÇͨ¹ýÏȼì²é´úÂëÖзºÐ͵ÄÀàÐÍ£¬È»ºóÔÙ½øÐÐÀàÐͲÁ³ý£¬ÔÚ½øÐбàÒëµÄ¡£ÄÇÀàÐͼì²éÊÇÕë¶Ô˵ÄÄØ£¬ÈÃÎÒÃÇÏÈ¿´Ò»¸öÀý×Ó¡£
ArrayList<String> arrayList1=new ArrayList(); // ÕýÈ·£¬Ö»ÄÜ·ÅÈëString ArrayList arrayList2=new ArrayList<String>(); // ¿ÉÒÔ·ÅÈëÈÎÒâObject |
ÕâÑùÊÇûÓдíÎóµÄ£¬²»¹ý»áÓиö±àÒëʱ¾¯¸æ¡£²»¹ýÔÚµÚÒ»ÖÖÇé¿ö£¬¿ÉÒÔʵÏÖÓë ÍêȫʹÓ÷ºÐͲÎÊýÒ»ÑùµÄЧ¹û£¬µÚ¶þÖÖÔòÍêȫûЧ¹û¡£ÒòΪ£¬±¾À´ÀàÐͼì²é¾ÍÊDZàÒëʱÍê³ÉµÄ¡£new
ArrayList()Ö»ÊÇÔÚÄÚ´æÖпª±ÙÒ»¸ö´æ´¢¿Õ¼ä£¬¿ÉÒÔ´æ´¢ÈκεÄÀàÐͶÔÏó¡£¶øÕæÕýÉæ¼°ÀàÐͼì²éµÄÊÇËüµÄÒýÓã¬ÒòΪÎÒÃÇÊÇʹÓÃËüÒýÓÃarrayList1
À´µ÷ÓÃËüµÄ·½·¨£¬±ÈÈç˵µ÷ÓÃadd()·½·¨¡£ËùÒÔarrayList1ÒýÓÃÄÜÍê³É·ºÐÍÀàÐ͵ļì²é¡£ ¶øÒýÓÃarrayList2ûÓÐʹÓ÷ºÐÍ£¬ËùÒÔ²»ÐС£
ÀàÐͼì²é¾ÍÊÇÕë¶ÔÒýÓõģ¬ËÊÇÒ»¸öÒýÓã¬ÓÃÕâ¸öÒýÓõ÷Ó÷ºÐÍ·½·¨£¬¾Í»á¶ÔÕâ¸öÒýÓõ÷Óõķ½·¨½øÐÐÀàÐͼì²â£¬¶øÎÞ¹ØËüÕæÕýÒýÓõĶÔÏó¡£
ʵÏÖ×Ô¶¯ÀàÐÍת»»
ÒòΪÀàÐͲÁ³ýµÄÎÊÌ⣬ËùÒÔËùÓеķºÐÍÀàÐͱäÁ¿×îºó¶¼»á±»Ì滻ΪÔʼÀàÐÍ¡£ÕâÑù¾ÍÒýÆðÁËÒ»¸öÎÊÌ⣬¼ÈÈ»¶¼±»Ì滻ΪÔʼÀàÐÍ£¬ÄÇôΪʲôÎÒÃÇÔÚ»ñÈ¡µÄʱºò£¬²»ÐèÒª½øÐÐÇ¿ÖÆÀàÐÍת»»ÄØ£¿
public class Test { public static void main(String[] args) { ArrayList<Date> list=new ArrayList<Date>(); list.add(new Date()); Date myDate=list.get(0); } } |
±àÒëÆ÷Éú³ÉµÄclassÎļþÖлáÔÚÄãµ÷Ó÷ºÐÍ·½·¨Íê³ÉÖ®ºó·µ»Øµ÷Óõã֮ǰ¼ÓÉÏÀàÐÍת»»µÄ²Ù×÷£¬±ÈÈçÉÏÎĵÄgetº¯Êý£¬¾ÍÊÇÔÚget·½·¨Íê³Éºó£¬jump»ØÔ±¾µÄ¸³Öµ²Ù×÷µÄÖ¸ÁîλÖÃ֮ǰ¼ÓÈëÁËÇ¿ÖÆ×ª»»£¬×ª»»µÄÀàÐÍÓɱàÒëÆ÷ÍÆµ¼¡£
·ºÐÍÖеļ̳йØÏµ
ÏÈ¿´Ò»¸öÀý×Ó£º
class DateInter extends A<Date> { @Override public void setValue(Date value) { super.setValue(value); } @Override public Date getValue() { return super.getValue(); } } |
ÏÈÀ´·ÖÎösetValue·½·¨£¬¸¸ÀàµÄÀàÐÍÊÇObject£¬¶ø×ÓÀàµÄÀàÐÍÊÇDate£¬²ÎÊýÀàÐͲ»Ò»Ñù£¬ÕâÈç¹ûʵÔÚÆÕͨµÄ¼Ì³Ð¹ØÏµÖУ¬¸ù±¾¾Í²»»áÊÇÖØÐ´£¬¶øÊÇÖØÔØ¡£
public void setValue(java.util.Date); //ÎÒÃÇÖØÐ´µÄsetValue·½·¨ Code: 0: aload_0 1: aload_1 2: invokespecial #16 // invoke A setValue :(Ljava/lang/Object;)V 5: return public java.util.Date getValue(); //ÎÒÃÇÖØÐ´µÄgetValue·½·¨ Code: 0: aload_0 1: invokespecial #23 // A.getValue :()Ljava/lang/Object; 4: checkcast #26 7: areturn public java.lang.Object getValue(); //±àÒëʱÓɱàÒëÆ÷Éú³ÉµÄ·½·¨ Code: 0: aload_0 1: invokevirtual #28 // Method getValue:() È¥µ÷ÓÃÎÒÃÇÖØÐ´µÄgetValue·½·¨ ; 4: areturn public void setValue(java.lang.Object); //±àÒëʱÓɱàÒëÆ÷Éú³ÉµÄ·½·¨ Code: 0: aload_0 1: aload_1 2: checkcast #26 5: invokevirtual #30 // Method setValue; È¥µ÷ÓÃÎÒÃÇÖØÐ´µÄsetValue·½·¨ )V 8: return |
²¢ÇÒ£¬»¹ÓÐÒ»µãÒ²Ðí»áÓÐÒÉÎÊ£¬×ÓÀàÖеķ½·¨ Object getValue()ºÍDate getValue()ÊÇͬ
ʱ´æÔڵģ¬¿ÉÊÇÈç¹ûÊdz£¹æµÄÁ½¸ö·½·¨£¬ËûÃǵķ½·¨Ç©ÃûÊÇÒ»ÑùµÄ£¬Ò²¾ÍÊÇ˵ÐéÄâ»ú¸ù±¾²»ÄÜ·Ö±ðÕâÁ½¸ö·½·¨¡£Èç¹ûÊÇÎÒÃÇ×Ô¼º±àдJava´úÂ룬ÕâÑùµÄ´úÂëÊÇÎÞ·¨Í¨¹ý±àÒëÆ÷µÄ¼ì²éµÄ£¬µ«ÊÇÐéÄâ»úÈ´ÊÇÔÊÐíÕâÑù×öµÄ£¬ÒòΪÐéÄâ»úͨ¹ý²ÎÊýÀàÐͺͷµ»ØÀàÐÍÀ´È·¶¨Ò»¸ö·½·¨£¬ËùÒÔ±àÒëÆ÷ΪÁËʵÏÖ·ºÐ͵Ķà̬ÔÊÐí×Ô¼º×öÕâ¸ö¿´ÆðÀ´¡°²»ºÏ·¨¡±µÄÊÂÇ飬Ȼºó½»¸øÐéÄâÆ÷È¥Çø±ð¡£
ÎÒÃÇÔÙ¿´Ò»¸ö¾³£³öÏÖµÄÀý×Ó¡£
class A { Object get(){ return new Object(); } } class B extends A { @Override Integer get() { return new Integer(1); } } public static void main(String[] args){ A a = new B(); B b = (B) a; A c = new A(); a.get(); b.get(); c.get(); } |
·´±àÒëÖ®ºóµÄ½á¹û
7: invokespecial #5 // Method com/suemi/network/test/A."<init>":()V 20: astore_3 21: aload_1 22: invokevirtual #6 // Method com/suemi/network/test/A.get:()Ljava/lang/Object; 25: pop 26: aload_2 27: invokevirtual #7 // Method com/suemi/network/test/B.get:()Ljava/lang/Integer; 30: pop 31: aload_3 32: invokevirtual #6 // Method com/suemi/network/test/A.get:()Ljava/lang/Object; |
ʵ¼ÊÉϵ±ÎÒÃÇʹÓø¸ÀàÒýÓõ÷ÓÃ×ÓÀàµÄgetʱ£¬Ïȵ÷ÓõÄÊÇJVMÉú³ÉµÄÄǸö¸²¸Ç·½·¨£¬ÔÚÇŽӷ½·¨ÔÙµ÷ÓÃ×Ô¼ºÐ´µÄ·½·¨ÊµÏÖ¡£
·ºÐͲÎÊýµÄ¼Ì³Ð¹ØÏµ
ÔÚJavaÖУ¬´ó¼Ò±È½ÏÊìϤµÄÊÇͨ¹ý¼Ì³Ð»úÖÆ¶ø²úÉúµÄÀàÐÍÌåϵ½á¹¹¡£±ÈÈçString¼Ì³Ð×ÔObject¡£¸ù¾ÝLiskovÌæ»»ÔÔò£¬×ÓÀàÊÇ¿ÉÒÔÌæ»»¸¸ÀàµÄ¡£µ±ÐèÒªObjectÀàµÄÒýÓõÄʱºò£¬Èç¹û´«ÈëÒ»¸öString¶ÔÏóÊÇûÓÐÈκÎÎÊÌâµÄ¡£µ«ÊÇ·´¹ýÀ´µÄ»°£¬¼´Óø¸ÀàµÄÒýÓÃÌæ»»×ÓÀàÒýÓõÄʱºò£¬¾ÍÐèÒª½øÐÐÇ¿ÖÆÀàÐÍת»»¡£±àÒëÆ÷²¢²»Äܱ£Ö¤ÔËÐÐʱ¿ÌÕâÖÖת»»Ò»¶¨ÊǺϷ¨µÄ¡£ÕâÖÖ×Ô¶¯µÄ×ÓÀàÌæ»»¸¸ÀàµÄÀàÐÍת»»»úÖÆ£¬¶ÔÓÚÊý×éÒ²ÊÇÊÊÓõġ£
String[]¿ÉÒÔÌæ»»Object[]¡£µ«ÊÇ·ºÐ͵ÄÒýÈ룬¶ÔÓÚÕâ¸öÀàÐÍϵͳ²úÉúÁËÒ»¶¨µÄÓ°Ïì¡£ÕýÈçÇ°ÃæÌáµ½µÄList<String>ÊDz»ÄÜÌæ»»µôList<Object>µÄ¡£
ÒýÈë·ºÐÍÖ®ºóµÄÀàÐÍϵͳÔö¼ÓÁËÁ½¸öά¶È£ºÒ»¸öÊÇÀàÐͲÎÊý×ÔÉíµÄ¼Ì³ÐÌåϵ½á¹¹£¬ÁíÍâÒ»¸öÊÇ·ºÐÍÀà»ò½Ó¿Ú×ÔÉíµÄ¼Ì³ÐÌåϵ½á¹¹¡£µÚÒ»¸öÖ¸µÄÊǶÔÓÚ
List<String>ºÍList<Object>ÕâÑùµÄÇé¿ö£¬ÀàÐͲÎÊýStringÊǼ̳Ð×ÔObjectµÄ¡£¶øµÚ¶þÖÖÖ¸µÄÊÇ
List½Ó¿Ú¼Ì³Ð×ÔCollection½Ó¿Ú¡£¶ÔÓÚÕâ¸öÀàÐÍϵͳ£¬ÓÐÈçϵÄһЩ¹æÔò£º
ÏàͬÀàÐͲÎÊýµÄ·ºÐÍÀàµÄ¹ØÏµÈ¡¾öÓÚ·ºÐÍÀà×ÔÉíµÄ¼Ì³ÐÌåϵ½á¹¹¡£¼´List<String>¿ÉÒÔ¸³¸øCollection<String>
ÀàÐ͵ÄÒýÓã¬List<String>¿ÉÒÔÌæ»»Collection<String>¡£ÕâÖÖÇé¿öÒ²ÊÊÓÃÓÚ´øÓÐÉÏϽçµÄÀàÐÍÉùÃ÷¡£
µ±·ºÐÍÀàµÄÀàÐÍÉùÃ÷ÖÐʹÓÃÁËͨÅä·ûµÄʱºò£¬ ÕâÖÖÌæ»»µÄÅжϿÉÒÔÔÚÁ½¸öά¶ÈÉÏ·Ö±ðÕ¹¿ª¡£Èç¶ÔCollection<?
extends Number>À´Ëµ£¬ÓÃÀ´Ìæ»»ËûµÄÒýÓÿÉÒÔÔÚCollectionÕâ¸öά¶ÈÉÏÕ¹¿ª£¬¼´List<?
extends Number>ºÍSet<? extends Number>µÈ£»Ò²¿ÉÒÔÔÚNumberÕâ¸ö²ã´ÎÉÏÕ¹¿ª£¬¼´Collection<Double>ºÍ
Collection<Integer>µÈ¡£Èç´ËÑ»·ÏÂÈ¥£¬ArrayList<Long>ºÍ
HashSet<Double>µÈÒ²¶¼¿ÉÒÔÌæ»»Collection<? extends
Number>¡£
Èç¹û·ºÐÍÀàÖаüº¬¶à¸öÀàÐͲÎÊý£¬Ôò¶ÔÓÚÿ¸öÀàÐͲÎÊý·Ö±ðÓ¦ÓÃÉÏÃæµÄ¹æÔò¡£Àí½âÁËÉÏÃæµÄ¹æÔòÖ®ºó£¬¾Í¿ÉÒÔºÜÈÝÒ×µÄÐÞÕýʵÀý·ÖÎöÖиø³öµÄ´úÂëÁË¡£Ö»ÐèÒª°ÑList<Object>¸Ä³ÉList<?>¼´¿É¡£List<String>¿ÉÒÔÌæ»»List<?>µÄ×ÓÀàÐÍ£¬Òò´Ë´«µÝ²ÎÊýʱ²»»á·¢Éú´íÎó¡£
¸öÈËÈÏΪÕâÀï¶ÔÉÏÃæÕâÖÖÇéÐÎʹÓÃ×ÓÀàÐÍÕâÖÖ˵·¨À´ÐÎÈÝÕâÖÖ¹ØÏµÊDz»µ±µÄ£¬ÒòΪList<String>µÈ±¾ÖÊÉÏÀ´Ëµ²»ÄÜËã×÷ÀàÐÍ£¬Ö»ÊǶÔListÀàÐͼÓÉÏÁ˱àÒëÆ÷¼ì²éÔ¼Êø£¬Ò²¾Í²»´æÔÚ×ÓÀàÐÍÕâÖÖ˵·¨¡£Ö»ÄÜÓÃÊÇ·ñÔÚ¸³ÖµÊ±Äܹ»½øÐÐÀàÐÍת»»À´ËµÃ÷¡£
·ºÐÍʹÓÃÖеÄ×¢Òâµã
ÔËÐÐʱÐͱð²éѯ
// ´íÎó£¬ÎªÀàÐͲÁ³ýÖ®ºó£¬ArrayList<String> ֻʣÏÂÔʼÀàÐÍ£¬·ºÐÍÐÅÏ¢String²»´æÔÚÁË£¬ÎÞ·¨½øÐÐÅÐ¶Ï if( arrayList instanceof ArrayList<String>) if( arrayList instanceof ArrayList<?>) // ÕýÈ· |
Òì³£ÖÐʹÓ÷ºÐ͵ÄÎÊÌâ
²»ÄÜÅ׳öÒ²²»Äܲ¶»ñ·ºÐÍÀàµÄ¶ÔÏó¡£ÊÂʵÉÏ£¬·ºÐÍÀàÀ©Õ¹Throwable¶¼²»ºÏ·¨¡£ÎªÊ²Ã´²»ÄÜÀ©Õ¹Throwable£¬ÒòΪÒì³£¶¼ÊÇÔÚÔËÐÐʱ²¶»ñºÍÅ׳öµÄ£¬¶øÔÚ±àÒëµÄʱºò£¬·ºÐÍÐÅϢȫ¶¼»á±»²Á³ýµô¡£ÀàÐÍÐÅÏ¢±»²Á³ýºó£¬ÄÇô¶à¸öʹÓò»Í¬·ºÐͲÎÊýµØ·½µÄcatch¶¼±äΪÔʼÀàÐÍObject£¬ÄÇôҲ¾ÍÊÇ˵£¬¶à¸öµØ·½µÄcatch±äµÄһģһÑù£¬Õâ×ÔÈ»²»±»ÔÊÐí¡£
²»ÄÜÔÙcatch×Ó¾äÖÐʹÓ÷ºÐͱäÁ¿¡£
public static <T extends Throwable> void doWork(Class<T> t){ try{ ... }catch(T e){ //±àÒë´íÎó T->Throwable£¬ÏÂÃæµÄÓÀÔ¶²»»á±»²¶»ñ£¬ËùÒÔ²»±»ÔÊÐí ... }catch(IndexOutOfBounds e){ } } |
²»ÔÊÐí´´½¨·ºÐÍÀàÊý×é
Pair<String,Integer>[] table = new Pair<String,Integer>[10];// ±àÒë´íÎó Pair[] table = new Pair[10];// ÎÞ±àÒë´íÎó |
ÓÉÓÚÊý×鱨ÐëЯ´ø×Ô¼ºÔªËصÄÀàÐÍÐÅÏ¢£¬ÔÚÀàÐͲÁ³ýÖ®ºó£¬Pair<String,Integer>Êý×é¾Í±ä³ÉÁËPair<Object,Object>Êý×飬Êý×éÖ»ÄÜЯ´øËüµÄÔªËØÊÇPairÕâÑùµÄÐÅÏ¢£¬µ«ÊDz¢²»ÄÜЯ´øÆä·ºÐͲÎÊýÀàÐ͵ÄÐÅÏ¢£¬ËùÒÔÒ²¾ÍÎÞ·¨±£Ö¤table[i]¸³ÖµµÄÀàÐͰ²È«¡£±àÒëÆ÷Ö»ÄܽûÓÃÕâÖÖ²Ù×÷¡£
·ºÐÍÀàÖеľ²Ì¬·½·¨ºÍ¾²Ì¬±äÁ¿
·ºÐÍÀàÖеľ²Ì¬·½·¨ºÍ¾²Ì¬±äÁ¿²»¿ÉÒÔʹÓ÷ºÐÍÀàËùÉùÃ÷µÄ·ºÐÍÀàÐͲÎÊý¡£
public class Test2<T> { public static T one; //±àÒë´íÎó public static T show(T one){ //±àÒë´íÎó return null; } } |
ÒòΪ·ºÐÍÀàÖеķºÐͲÎÊýµÄʵÀý»¯ÊÇÔÚ¶¨Òå¶ÔÏóµÄʱºòÖ¸¶¨µÄ£¬¶ø¾²Ì¬±äÁ¿ºÍ¾²Ì¬·½·¨²»ÐèҪʹÓöÔÏóÀ´µ÷Ó᣶ÔÏó¶¼Ã»Óд´½¨£¬ÈçºÎÈ·¶¨Õâ¸ö·ºÐͲÎÊýÊǺÎÖÖÀàÐÍ£¬ËùÒÔµ±È»ÊÇ´íÎóµÄ¡£
ÀàÐͲÁ³ýºóµÄ³åÍ»
class Pair<T> { public boolean equals(T value) { return null; } } |
·½·¨Öض¨ÒåÁË£¬Í¬Ê±´æÔÚÁ½¸öequals(Object o)¡£ |