Ответ
ClassCastException — это непроверяемое исключение времени выполнения (RuntimeException), которое возникает при попытке привести ссылку на объект к типу, с которым этот объект несовместим. Несовместимость означает, что класс объекта не является ни целевым классом, ни его подклассом, ни классом, реализующим целевой интерфейс.
Типичный пример возникновения:
Object obj = "Это строка";
Integer number = (Integer) obj; // Выбросит ClassCastException: String cannot be cast to Integer
Основные причины:
- Прямое несоответствие типов (как в примере выше).
- Ошибочное приведение в иерархии наследования:
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 для обеспечения типобезопасности на этапе компиляции, что минимизирует необходимость явного приведения типов.