Разница между RTTI и отражением в Java

Мой вопрос: когда информация о классе загружается во время выполнения?

Когда кто-то звонитinstanceof это считается RTTI или отражение? Или это зависит от реальной ситуации?

Ответы на вопрос(2)

истинная разница между RTTI и рефлексией заключается в том, что с RTTI компилятор открывает и проверяет файл .class во время компиляции. С отражением, файл .class недоступен во время компиляции; он открывается и проверяется средой выполнения.

Решение Вопроса

RTTI» это специфичный для C ++ термин, относящийся к функциональности основного языка, который позволяет программе определять динамические типы различных объектов во время выполнения. Обычно это относится кdynamic_cast или жеtypeid операторы, а также связанные сstd::type_info объект произведен.typeid

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

Термин ямы слышалиinstanceof являетсятип самоанализа а такжеinstanceof иногда упоминается какСамоанализ объектаТак как программе разрешено смотреть на запущенные типы, чтобы определить, какие действия предпринять. Я думаю, что это более слабый термин, чем рефлексия, так какне позволяет тщательно исследовать поля или методы объекта, но я неНе думаю, что технически некорректно называть использованиеinstanceof оператор отражения.

Что касается вашего другого вопроса - как информация о классе загружается во время выполнения? - тот'действительно до реализации JVM.ClassLoader Тип в конечном счете отвечает за загрузку классов в систему, но JVM может интерпретировать это так, как хочет. Однажды я создал прототип JVM в JavaScript, и все внутренние вызовы рефлексии просто запрашивали базовые структуры данных JS, которые у меня были для представления классов, полей и методов. Я хотел бы представить, что HotSpot JVM делает что-то совершенно другое, но этов значительной степени определяется реализацией.

Надеюсь это поможет!

 godlamp15 мая 2013 г., 18:05
Спасибо! Каким-то образом я узнал о RTTI в своем курсе по Java, поэтому, вероятно, я запутался: S

Ваш ответ на вопрос