ジェネリック クラスの生の型はジェネリック クラスのすべての異なるバリエーションを取る (ポイントする) ことができ、ジェネリック クラスのすべての異なるバリエーションはジェネリック クラスの生の型を取る (ポイントする) ことができることに気付きました。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 {
}
}