Интуитивно можно попытаться решить проблему, сделав метод общим:
public <X super IFace<T>> List<MyClass<T, X> getList() { ... }
Но этот синтаксис недопустим, так как обычно не имеет смысла давать нижнюю границу для параметров типа, используя super
. См. Эту статью для хорошего объяснения почему: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ107
Edit:
Глядя на ваш код, я думаю, вы, возможно, путаете super
с extends
в определении границ параметра типа. было бы значимым, если бы getList()
возвратил List<MyClass<T, ? extends IFace<T>>>
вместо этого, поскольку это указывает верхний , связанный с параметром второго типа MyClass
(другими словами, этот тип должен быть чем-то реализующим IFace<T>
).
Поскольку ответ natix указывает , использование подстановочных знаков в универсальных типах возвращаемых данных не рекомендуется, поскольку оно эффективно скрывает часть информации универсального типа для возвращаемого объекта. Вместо этого сделайте метод универсальным:
public <X extends IFace<T>> List<MyClass<T, X> getList() { ... }
Что позволяет вызывающему коду указывать тип X
через определение типа.