Generi c проверки типов являются функцией времени компиляции. Во время выполнения вся информация о типе теряется. Смотрите "стирание типа". Поведение, которое вы видите, может легко произойти, если, например, унаследованный API, который использует коллекции не-generi c, сопоставлен с API-интерфейсом, который использует дженерики и требует приведения коллекции. Если эта коллекция содержит объекты неожиданного типа, вы, к сожалению, узнаете об этом только во время выполнения.