Необработанные типы и подтипыJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Необработанные типы и подтипы

Сообщение Anonymous »

У нас есть общий класс

Код: Выделить всё

SomeClass{ }
Можем написать строку:

Код: Выделить всё

SomeClass s= new SomeClass();
Это нормально, поскольку необработанный тип является супертипом универсального типа. Но

Код: Выделить всё

SomeClass s= new SomeClass();
правильно. Почему это правильно? Я думал, что стирание типов происходит до проверки типов, но это неверно.
Из «Руководства хакера по Javac»

Когда Компилятор Java запускается с политикой компиляции по умолчанию, он выполняет следующие этапы:
  • анализ: считывает набор исходных файлов *.java. и сопоставляет полученный токен
    последовательность в узлы AST.
  • enter: вводит символы для определений в таблицу символов.
  • < Strong>обработка аннотаций: по запросу обрабатывает аннотации, найденные в
    указанных единицах компиляции.
  • атрибут: Атрибуты синтаксических деревьев. Этот шаг включает
    разрешение имен, проверку типов и свертывание констант.
  • поток. Выполняет анализ потока данных на деревьях из предыдущего шага.
    Это включает в себя проверку присваиваний и достижимости.
  • desugar: перезаписывает AST и транслирует часть синтаксического сахара.
  • generate: генерирует исходные файлы. или файлы классов.
Generic — это синтаксический сахар, поэтому стирание типа вызывается на 6-м проходе после проверки типа, которая вызывается на 4 проходе. Я в замешательстве.

Подробнее здесь: https://stackoverflow.com/questions/197 ... -subtyping
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»