В чем разница между временем компиляции и временем выполнения любого объекта в Java? Я читаю книгу Effective Java, и Джошуа Блох упоминает о типах времени компиляции и типах времени выполнения экземпляров массива в пункте 26 много раз, главным образом для описания того, что подавление предупреждений о броске может быть безопасным иногда.В чем разница между типом времени компиляции и типом времени выполнения для любого объекта в Java?
// Appropriate suppression of unchecked warning
public E pop() {
if (size == 0)
throw new EmptyStackException();
// push requires elements to be of type E, so cast is correct
@SuppressWarnings("unchecked") E result = (E) elements[--size];
elements[size] = null; // Eliminate obsolete reference
return result;
}
Здесь автор говорит об этих различных типах types
в контексте массивов. Но через этот вопрос я хотел бы понять разницу между compile time types
vs run time types
для любого типа объекта.
На самом деле существует три типа проверки типов: время компиляции, время проверки и время выполнения. Runtime является наименее распространенным типом и в основном происходит только там, где есть явная операция литья. –
@HotLicks Интерфейсы также проверяются во время выполнения, а не на время проверки. Но поскольку компилятор также их проверяет, вам не нужно беспокоиться об этом, кроме случаев отражения или не Java-кода. – Antimony
@Antimony - Ну, интерфейсы, конечно, рассматриваются как классы для проверки типов. Существует динамический поиск при вызове метода интерфейса, но сбой поиска будет по существу «внутренней ошибкой», если я правильно помню. –