Что такое ClassCastException в Java?

«Что такое ClassCastException в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ClassCastException — это непроверяемое исключение времени выполнения (RuntimeException), которое возникает при попытке привести ссылку на объект к типу, с которым этот объект несовместим. Несовместимость означает, что класс объекта не является ни целевым классом, ни его подклассом, ни классом, реализующим целевой интерфейс.

Типичный пример возникновения:

Object obj = "Это строка";
Integer number = (Integer) obj; // Выбросит ClassCastException: String cannot be cast to Integer

Основные причины:

  1. Прямое несоответствие типов (как в примере выше).
  2. Ошибочное приведение в иерархии наследования:
    Animal animal = new Dog();
    Cat cat = (Cat) animal; // ClassCastException: Dog cannot be cast to Cat

Как предотвратить:

  • Всегда использовать оператор instanceof перед нисходящим приведением (downcasting):
    if (obj instanceof Integer) {
    Integer safeNumber = (Integer) obj;
    // безопасная работа с safeNumber
    }
  • Правильно проектировать иерархии классов и интерфейсов.
  • Максимально использовать Generics для обеспечения типобезопасности на этапе компиляции, что минимизирует необходимость явного приведения типов.