Как узнать, является ли A подтипом B?
В языке Java существует три способа, которыми можно проверить совместимость типов.
Во-первых, с помощью оператора instanceof. В нем в качестве первого аргумента передаётся экземпляр класса А, второй аргумент имя проверяемого класса В. Если экземпляр А не принадлежит к цепочке наследования класса В, то А не считается подтипом В и компилятор выдаст сообщение «inconvertible types». Это наиболее быстрый и популярный способ.
Во-вторых, с помощью метода isInstance(). Его применяют, когда экземпляр А имеется, а В неизвестен. Для двух переменных: А а, и Class bClass, проверку подтипов можно выполнить так: bClass.isInstance(a).
В-третьих, если экземпляр А несуществует, то можно воспользоваться методом isAssignableFrom(). Например: bClass.isAssignableFrom(aClass). Это самый долгий по времени выполнения способ.
Иногда, для проверки применяют операцию приведения типов. В этом случае пытаются привести экземпляр А к классу В. Если эта операция не удалась, то компилятор выдаст исключение ClassCastException. Этот способ неприемлем, так как строить логику программы на исключениях – плохой стиль программирования, способный привести к появлению большого количества багов, обнаружение которых затруднено.
a instanceof В
B.class.islnstance(a)
В.class.isAssignableFrom(A.class)
// так делать не надо!
try {
final В unused = (В) a;
return true;
} catch (ClassCastException e) {
return false;
}
Учитесь как в игре
Обучающая платформа AndroidSprint
Уровни, XP, достижения и рейтинги. Увидите прогресс каждый день — мотивация не пропадает даже через месяцы обучения
- Геймификация: уровни, опыт, достижения — как в игре, но навыки реальные
- Карта навыков: визуальный прогресс по каждой технологии — видите, что освоили
- Рейтинги: сравнивайте себя с другими студентами — здоровая конкуренция