Интроспекция (программирование)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Интроспекция (англ. type introspection) в программировании — возможность в некоторых объектно-ориентированных языках определить тип и структуру объекта во время выполнения программы. Эта возможность особенно заметна в языке Objective C, однако имеется во всех языках, позволяющих манипулировать типами объектов как объектами первого класса. Интроспекция может использоваться для реализации ad hoc полиморфизма.

Языки, поддерживающие интроспекцию[править | править вики-текст]

Примеры[править | править вики-текст]

C++[править | править вики-текст]

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[править | править вики-текст]

В Java механизм интроспекции реализуется с помощью оператора instanceof[2]. instanceof определяет, принадлежит ли объект данному классу, классу потомку или реализует ли объект данный интерфейс. Например:

if(obj instanceof Person){
   Person p = (Person)obj;
   p.walk();
}

Класс java.lang.Class[3] позволяет получить доступ к более продвинутой интроспекции.

Например, если нужно определить точно тип объекта, можно воспользоваться методами Object.getClass() или Class.getName():

System.out.println(obj.getClass().getName());

См. также[править | править вики-текст]

Примечания[править | править вики-текст]