As far as I know,
<T extends Object & Comparable <? super T>>
is equivalent with:
<T extends Comparable<? super T>>
So, this says:
T
, which should be comparable toT
or something that is abstracter thanT
.
This construction forces you to choose a T like MyClass
, if MyClass
is declared like one of these:
MyClass implements Comparable<MyClass>
MyClass implements Comparable<MySuperClass>
MyClass implements Comparable<Object>
But doesn't allow:
MyClass implements Comparable<String>
MyClass implements Comparable<MyChildClass>
Given that: MyChildClass extends MyClass extends MySuperClass extends Object
.