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