Я заметил, что необработанный тип универсального класса может принимать (указывать) все различные варианты родового класса, а также все различные варианты общего класса могут принимать (указывать) необработанный тип родового класса. Почему Java Generics ведет себя так? Это просто из-за совместимости со старыми версиями 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, так что это в основном по соображениям совместимости. –