WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

Интроспекция (англ. 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 .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии