Прямо из спецификации API для [ClassCastException][1]
:
Брошенный, чтобы указать, что код попытался преобразовать объект в подкласс, экземпляром которого он не является.
В вашем случае вы понижаете (кастинг Object
до ArrayList
). Каждый ArrayList
- это Object
, но не каждый Object
- это ArrayList
.
Как правило, уныние - плохая идея. Вам следует избегать этого. Если вы используете его, вам лучше включить чек, используя instanceof
.
Object o = new ArrayList<>();
if (o instanceof ArrayList) {
ArrayList<String> arr = (ArrayList<String>) o;
}