我注意到原始類型的通用類的可以採取(指向)的一般類的所有不同的變化,並且也是通用類的所有不同的變化可以採取(指向)的原始類型的通用類的。爲什麼Java泛型的行爲如此?純粹是因爲與舊版Java的兼容性?原始類型的泛型類可以採用該泛型類的所有不同變體的事實是Java兼容性的問題嗎?
實施例:
//Main.java
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
List listRaw = new ArrayList();
List<Student> listQualified = new ArrayList<Student>();
List<?> listUnbounded = new ArrayList<Student>();
List<? extends Student> listUpBounded = new ArrayList<Student>();
List<? super Student> listDownBounded = new ArrayList<Student>();
// List raw type can take all different variations of List
List rawList1 = listRaw;
List rawList2 = listQualified;
List rawList3 = listUnbounded;
List rawList4 = listUpBounded;
List rawList5 = listDownBounded;
// All different variations of List can take List raw type
listRaw = rawList1;
listQualified = rawList2;
listUnbounded = rawList3;
listUpBounded = rawList4;
listDownBounded = rawList5;
}
}
//People.java
public class People {
public static class Student extends People {
}
public class HistoryStudent extends Student {
}
public class MathStudent extends Student {
}
}
謝謝Ale,所以主要是出於兼容性原因。 – 2012-07-10 12:15:17