If you look at any implementation of Comparable in the JDK, you'll see
that the type parameter for Comparable is supposed to be the type of
the implementing class:
http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html
The current type signature of Comparable<Object> is pretty awful, at the
very least because you can not, in fact, successfully compare
AnyObjectId with any random subclass of Object. It also causes problems
with type-inference and the scala.math.Ordering trait in Scala.
In order to compile, this change *does* require removing the
AnyObjectId.ompareTo(Object) method - which actually only ever cast
to AnyObjectId in any case. Nothing in the JGit test suite requires this
method, but it might constitute a breaking API change, so it would be
best if it can be added in time for JGit 3.0.
Change-Id: I3b549a5519ccd6785f98e444da76d2363bcbe41a
* with this instance can alter at any time, if this instance is modified to
* represent a different object name.
*/
-public abstract class AnyObjectId implements Comparable<Object> {
+public abstract class AnyObjectId implements Comparable<AnyObjectId> {
/**
* Compare to object identifier byte sequences for equality.
return NB.compareUInt32(w5, other.w5);
}
- public final int compareTo(final Object other) {
- return compareTo(((AnyObjectId) other));
- }
-
/**
* Compare this ObjectId to a network-byte-order ObjectId.
*