Интроспекция (англ. type introspection) в программировании — возможность запросить тип и структуру объекта во время выполнения программы. Особое значение имеет в языке Objective C, однако имеется почти во всех языках, позволяющих манипулировать типами объектов как объектами первого класса; среди языков, поддерживающих интроспекцию — C++ (с RTTI), Go, Java, JavaScript, Perl, Ruby, Smalltalk; в PHP и Python интроспекция интегрирована в сам язык. Интроспекция может использоваться для реализации ad-hoc-полиморфизма.
C++ поддерживает интроспекцию благодаря динамическому определению типа (RTTI) typeid и dynamic_cast.
Оператор dynamic_cast
может быть использован, чтобы определить, принадлежит ли объект иерархии определённого класса. Например:
Person* p = dynamic_cast<Person *>(obj);
if (p != nullptr) {
p->walk();
}
Оператор typeid
получает объект типа std::type_info
, описывающий тип:
if (typeid(Person) == typeid(*obj)) {
serialize_person( obj );
}
В Java механизм интроспекции реализуется с помощью оператора instanceof
[1]. instanceof
определяет, принадлежит ли объект данному классу, классу-потомку или реализует ли объект данный интерфейс. Например:
if(obj instanceof Person){
Person p = (Person)obj;
p.walk();
}
Класс java.lang.Class
[2] позволяет получить доступ к более продвинутой интроспекции.
Например, если нужно определить точно тип объекта, можно воспользоваться методами Object.getClass()
или Class.getName()
:
System.out.println(obj.getClass().getName());
Для улучшения этой статьи желательно: |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .