русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Instanceof и сравнение Class


Дата добавления: 2015-06-12; просмотров: 989; Нарушение авторских прав


При получении информации о типе объекта важно различать действие любой формы оператора instanceof (будь это сам оператор instanceof или метод isInstance() - они дают одинаковые результаты) и прямого сравнения объектов Class. Вот пример, который показывает, в чем их различия:

//: typeinfo/FamilyVsExactType.java

// The difference between instanceof and class

package typeinfo;

import static net.mindview.util.Print.*;

 

class Base {}

class Derived extends Base {}

 

public class FamilyVsExactType {

static void test(Object x) {

print("Testing x of type " + x.getClass());

print("x instanceof Base " + (x instanceof Base));

print("x instanceof Derived "+ (x instanceof Derived));

print("Base.isInstance(x) "+ Base.class.isInstance(x));

print("Derived.isInstance(x) " +

Derived.class.isInstance(x));

print("x.getClass() == Base.class " +

(x.getClass() == Base.class));

print("x.getClass() == Derived.class " +

(x.getClass() == Derived.class));

print("x.getClass().equals(Base.class)) "+

(x.getClass().equals(Base.class)));

print("x.getClass().equals(Derived.class)) " +

(x.getClass().equals(Derived.class)));

}

public static void main(String[] args) {

test(new Base());

test(new Derived());

}

}

<spoiler text="Output:">

Testing x of type class typeinfo.Base

x instanceof Base true

x instanceof Derived false

Base.isInstance(x) true



Derived.isInstance(x) false

x.getClass() == Base.class true

x.getClass() == Derived.class false

x.getClass().equals(Base.class)) true

x.getClass().equals(Derived.class)) false

Testing x of type class typeinfo.Derived

x instanceof Base true

x instanceof Derived true

Base.isInstance(x) true



Derived.isInstance(x) true

x.getClass() == Base.class false

x.getClass() == Derived.class true

x.getClass().equals(Base.class)) false

x.getClass().equals(Derived.class)) true

</spoiler> Метод test() осуществляет проверку типов полученного объекта, используя для этого обе формы оператора instanceof. Затем он получает ссылку на объект Class и использует операцию сравнения ссылок == и метод equals(), чтобы прове­рить объекты Class на эквивалентность. Пример доказывает справедливость утверждения о том, что действие оператора instanceof и метода islnstance() одинаково. Совпадают и результаты работы операции сравнения == и метода equals(). Но сами тесты приводят к разным заключениям. В соответствии с концепцией типа instanceof дает ответ на вопрос: «Объект принадлежит этому классу или производному от него?» С другой стороны, сравнение объектов Class оператором == не затрагивает наследования — либо тип точно совпадает, либо нет.



<== предыдущая лекция | следующая лекция ==>
Регистрация фабрик | Рефлексия: динамическая информация о классе


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.362 сек.