Учитывая общий интерфейс
interface Foo<A, B> { }
Я хочу написать реализацию, которая требует, чтобы A был подклассом B. Поэтому я хочу сделать
class Bar<A, B super A> implements Foo<A, B> { }
// --> Syntax error
или
class Bar<A extends B, B> implements Foo<A, B> { }
// --> illegal forward reference
Но единственным решением, которое, кажется, работает, является следующее:
class Bar<B, A extends B> implements Foo<A, B> { }
что является своего рода уродливым, поскольку оно меняет порядок общих параметров.
Существуют ли какие-либо решения или обходные пути для этой проблемы?