In Effevtive Java I see a declaration: public static
, type variable T
is a
That means that you will then expect a type that is comparable to Object
, since java infers generic types to be Object
when not provided.
<T extends Comparable> // The generic type for Comparable is inferred as Object as it was not provided.
This means that the type provided to the list would need to implement compareTo(Object o)
and implement Comparable
(notice the missing generic type to Comparable
), which I assume is not intended.
You would have your parametrized type declared to implement the Comparable
interface in a "raw" way.
For instance, a class Foo implements Comparable
(raw type) would fit your parametrized type.
In turn, that class could override compareTo(Object o)
instead of compareTo(Foo f)
.