Вы не можете использовать общий тип (T в вашем случае) с ограничениями при объявлении переменной.
Он должен быть либо подстановочным знаком (?), либо просто использовать полный родовой тип класса.
например.
// Here only extends is allowed
class My< T extends SomeInterface >
{
// If using T, then no bounds are allowed
private Collection<T> var1;
private Collection< ? extends SomeInterface > var2;
// Cannot have extends and super on the same wildcard declaration
private Collection< ? super MyClass > var3;
// You can use T as a bound for wildcard
private Collection< ? super T > var4;
private Collection< ? extends T > var5;
}
В некоторых случаях вы можете затянуть объявление, добавив дополнительный общий параметр к классу (или методу) и добавив привязку к этому конкретному параметру:
class My <
T extends MyClass< I >,
I extends SomeInterface
>
{
}