Search code examples
javagenericscomparable

java generic comparable idiom


I encountered the following piece of a definition for a generic class:

public class binarysearchnode<T extends Comparable<T>> implements Comparable<binarysearchnode<T>>{
.............
}

Please help explaining why a class would specify itself as a Type parameter to comparable while implementing the comparable interface? How would it be different from the following:

public class binarysearchnode<T extends Comparable<T>> implements Comparable<? super (or extends)T>{
.............
}

Solution

  • This makes it possible to compare binarysearchnodes to each other. If it implemented Comparable<T>, that would instead mean that the node could be compared to the value of the node, which would be odd.

    Inside the class you will probably find something like this:

    T value;
    
    public int compareTo(binarysearchnode<T> other) {
       return value.compareTo(other.value);
    }
    

    In order to be able to implement compareTo() like this, the value class (T) needs to be comparable to other objects of its class - hence the declaration of <T extends Comparable<T>> in the class definition.