Когда проверка типов происходит в Java - PullRequest
5 голосов
/ 24 апреля 2019

У меня есть вопрос в моей домашней работе, который выглядит следующим образом.

Какой из следующих процессов происходит ТОЛЬКО во время компиляции в Java?

(i) вывод типа - вывод типа переменной, тип которой не указан.
(ii) стирание типа - замена параметра типа обобщенного типа либо объектом, либо его границей.
(iii) проверка типа - проверка, соответствует ли значение типу переменной, которой оно присвоено.

A. Только (я)
B. Только (i) и (ii)
C. Только (i) и (iii)
D. Только (ii) и (iii)
E. (i), (ii) и (iii)

Насколько я понимаю, Java выполняет проверки типов для обобщений только во время компиляции, поэтому (i) и (ii) определенно верны. Тем не менее, я не уверен в проверке типов, и из предоставленного описания не похоже, что проверка типов не ограничивается обобщениями, но также и другими вещами.

Решением этого вопроса является В, но объяснений не было. Мне было интересно, когда происходит проверка типов? Если это происходит не только во время компиляции, это происходит как во время компиляции, так и во время выполнения или только во время выполнения, и почему?

1 Ответ

3 голосов
/ 24 апреля 2019

Это также происходит во время выполнения, потому что вы можете приводить объекты к их подтипам. Вы можете вручную принудительно выполнить проверку типов снова в любой точке с помощью instanceof .

Вы видите, что Java не является полностью статически типизированным языком. Всякий раз, когда вы приводите объект из типа к подтипу, JVM выполняет динамическую проверку типов (во время выполнения), чтобы проверить, действительно ли объект является экземпляром подтипа. Использование instanceof является еще одним примером динамической проверки типов.

из этого ответа

...