Search code examples
javagenericsinterfacecomparable

Create a compareTo to a Generic Class that Implements Comparable


I have a Generic Class with two type variables, which implements java.lang.Comparable.

public class DoubleKey<K,J> implements Comparable<DoubleKey<K,J>>{

    private K key1;
    private J key2;

    public DoubleKey(K key1, J key2){
        this.key1 = key1;
        this.key2 = key2;
    } 

    public K getFirstKey(){
        return this.key1;
    }

    public J getSecondKey(){
        return this.key2;
    }

    // need for Comparable interface
    public int compareTo(DoubleKey<K,J> aThat){
        ...
    }

}

Becuase i implemeted it with Comparable, I need to write the compareTo() method. Because K, J can be of ANY type, I'm having problems on how to compare them completely. Is there a way to be able to catch all possible types (Primitive, Wrapper, Object) in the comparison? Thanks for the help!


Solution

  • so to summarize the said above and to puzzle it together into a working code this is:

        public class DoubleKey<K extends Comparable<K>, J extends Comparable<J>>
            implements Comparable<DoubleKey<K, J>> {
    
        private K key1;
        private J key2;
    
        public DoubleKey(K key1, J key2) {
            this.key1 = key1;
            this.key2 = key2;
        }
    
        public K getFirstKey() {
            return this.key1;
        }
    
        public J getSecondKey() {
            return this.key2;
        }
    
        public int compareTo(DoubleKey<K, J> that) {
    
            int cmp = this.getFirstKey().compareTo(that.getFirstKey());
            if (cmp == 0)
                cmp = this.getSecondKey().compareTo(that.getSecondKey());
            return cmp;
        }
    }