Я ссылаюсь на раздел 5.1.6.1 JLS (https://docs.oracle.com/javase/specs/jls/se13/jls13.pdf).
В точке 2 говорится, что «Если существует параметризованный тип X, который является супертипом T и параметризованного типа Y, который является супертипом S, так что стирание X и Y одинаково, тогда X и Y не доказуемо различимы ".
Теперь давайте предположим, что T := List<Object>
, S := List<String>
, и мы пишем T = S;
, что дает ошибку компиляции. Но это не соответствует вышеупомянутой цитате. Если мы выберем X := List<?>
, который является параметризованным типом и супертипом List<Object>
, и мы выберем Y := List<?>
, то стирание X
и Y
будет одинаковым (List
).
Где я неправильно понимаю правило?