вместо
Class<? extends T> type = instance.getClass();
вам нужно использовать
Class<? extends MyClass> type = instance.getClass();
Вы не можете напрямую использовать T
здесь.
Причиной является сигнатура метода Object.getClass()
(которую вы вызываете). Это:
public final Class<? extends Object> getClass()
Итак, вы пытаетесь конвертировать из Class<? extends Object>
в Class<? extends T>
, что недопустимо (потому что вы понижаете) допускается , допускается использование явного приведения:
Class<? extends T> type = (Class<? extends T>) instance.getClass();
будет работать (хотя генерирует предупреждение о безопасности типа).