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: I3b549a5519ccd6785f98e444da76d2363bcbe41atags/v3.0.0.201305281830-rc2
@@ -57,7 +57,7 @@ import org.eclipse.jgit.util.NB; | |||
* 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. | |||
@@ -184,10 +184,6 @@ public abstract class AnyObjectId implements Comparable<Object> { | |||
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. | |||
* |