???????????
???????????Java?????????????????????е???????C++????壬?????????????????????ò????????????????????????λ??????????????Java????????????????????????????????
????1?????????????????????????????????????????????????????java.lang.ClassCastException??????????????????????????????????????????????????????????????????
????2??????????????????????????????????????????
????3???????????????????
??????????????????????????????????????????????????????????????????岻?????????????????????μ????????????????????????????????????????????????в????
???????????????????????????????????
????· ??????????????????????????????ArrayList<T>?????м?????
????· ??????????????????м?????????class?????
????· ?????????????????????????
????· ArrayList<Integer>?????????
????· ArrayList<Integer>??List<Integer>??ArrayList<Number>??List<Number>????????????????????????????????
???????????
????????????????????????????????????type erasure???? Java?е???????????????????????????????????????Java????????????????????е?????????????÷???????????????????????????????????????????????????????????????????ж????List<Object>??List<String>???????????????????List??JVM?????????List??????????????????????JVM????????????Java???????????????????????????????????????????????????????????????????????????????????????Java????????????C++??????????????????????
????????????????????????????????????й????????
????· ???????????????е?Class????????粢??????List<String>.class????List<Integer>.class???????List.class??
????· ?????????????????????????????????????????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
????????????д????????????и?????????檔???????????????????????? ?????÷???????????Ч???????????????Ч??????????????????????????????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