Это связано с дизайном метода getClass () и обобщений.
По соображениям совместимости метод getClass () не является универсальным, поэтому он возвращает экземпляр типа
Class<?>
не
Class<Child>
как и следовало ожидать.
Class<?>
означает универсальный тип с параметром типа Object.
Итак, тип возвращаемого значения
Class<?>.cast()
метод - Объект. То есть Общая природа этого метода не работает.
Вы можете написать
v3 = ( (Class<Child>) v.getClass() ).cast(v2);
но это бессмысленно, так как вы можете просто написать
v3 = ( Child ) v.getClass().cast(v2);
Кроме того, вы должны помнить, что генерики работают только во время компиляции. То есть genercis предназначены только для проверки типов в вашей IDE. Во время выполнения все генерики
<?>
Итак, на самом деле метод cast () ничего не делает во время выполнения. Это только заглушка для использования, когда у вас есть экземпляры типа
Class<something>