Java Generics: преобразование необработанного типа в любой реифицируемый тип не генерирует предупреждение о неконтролируемом преобразовании

У меня есть следующий вопрос относительно приведенного ниже кода:

public class GenericBridgeMethods <T> {

    public static void main(String[] args) {
        List obj = new ArrayList<Integer>();
        List <?> l1 = (List<?>) obj; // clause 1
        GenericBridgeMethods <?> g1 = (GenericBridgeMethods<?>) obj; // clause 2
   }

}

a. Пункт 1, конечно, не дает предупреждения о непроверенном приведении
b.Пункт 2 также не выдавал предупреждения о неконтролируемом приведении

. Я заметил, что приведение необработанного типа (obj) к ЛЮБОМУ реифицируемому типу (например, GenericBridgeMethods или GenericBridgeMethods ) Не дает предупреждения о непроверенном приведении. Если вы запустите этот код, в пункте 2 возникнет ошибка времени выполнения.

Разве компилятор не должен выдавать предупреждение в пункте 2

РЕДАКТИРОВАТЬ 1:

    ArrayList a1 = new ArrayList<Integer>(); // clause 3
    Number n1 = (Number)a1; // clause 4 ERROR
    Comparable c1 = (Comparable)a1; // clause 5

    List l1 = new ArrayList<Integer>(); // clause 6
    Number n2 = (Number)l1; // clause 7
    Comparable c2 = (Comparable)l1; // clause 8

Кто-нибудь может объяснить, почему только в пункте 4 есть ошибка?

5
задан yapkm01 6 October 2011 в 18:36
поделиться