У меня есть вопрос в моем домашнем задании, который выглядит так.
Какой из следующих процессов происходит ТОЛЬКО во время компиляции в Java?
(i) вывод типа - вывод типа переменной, тип которой не указан. (ii) стирание типа - замена параметра типа дженериков либо на объект, либо на его привязку. (iii) проверка типа – проверка, соответствует ли значение типу переменной, которой оно присвоено.
А. Только (я)
B. Только (i) и (ii)
C. Только (i) и (iii)
D. Только (ii) и (iii)
E. (i), (ii) и (iii)
Насколько я понимаю, Java выполняет проверки типов для дженериков только во время компиляции, поэтому (i) и (ii) определенно верны. Однако я не уверен в проверке типов, и из представленного описания не похоже, что проверка типов не ограничивается дженериками, но и другими вещами.
Ответом на этот вопрос является B, но объяснение не было дано. Тогда мне было интересно, когда происходит проверка типов? Если это происходит не только во время компиляции, происходит ли это и во время компиляции, и во время выполнения, или только во время выполнения, и почему?
@markspace Можете ли вы показать пример, в котором проверка типов происходит во время выполнения?
@Code-Apprentice Примером может быть приведение к подтипу




Это также происходит во время выполнения, потому что вы можете приводить объекты к их подтипам. Вы можете вручную заставить его снова выполнять проверку типов в любой момент с помощью случай.
You see Java is not a completely statically typed language. Whenever you cast an object from a type to a subtype, the JVM performs a dynamic (runtime) typecheck to check that the object really is an instance of the subtype. Using instanceof is another example of dynamic type checking.
из этого отвечать
Проверка типов происходит во время выполнения и во время компиляции. Заданный вопрос, для которого происходит ТОЛЬКО во время компиляции. Проверка типов — это и то, и другое.