Short answer
It's a self-referential bound expressing 'T must be comparable to its own type', which is how Collections.max and sorting APIs guarantee elements can be ordered against each other rather than against arbitrary objects.
Explanation
The same pattern powers the self-typed builder idiom (<T extends Builder<T>>) so fluent methods return the concrete subtype. It looks circular but is a standard way to make generic APIs both type-safe and ergonomic; the cost is the declaration gets verbose and intimidating to readers.
Common mistakes
- Not recognising this pattern in Comparable, Enum<E> and builders.
- Writing <T extends Comparable> with the raw type.