Сравнимый и компараторский интерфейс в Java

Я хочу написать общий класс Pair, который имеет два члена: ключ и значение. Единственное требование к этому классу состоит в том, что и ключ, и значение должны реализовывать интерфейс Comparable, в противном случае класс Pair не примет их в качестве параметра типа.

Сначала я пишу это так:

public class Pair

Но компилятор JDK 1.6 выдаст предупреждение об этом:

Comparable is a raw type. References to generic type Comparable should be parameterized

Затем я попытался добавить параметры типа, и код теперь выглядит так:

public class Pair

Теперь все идет хорошо, пока я не попытался сгенерировать Comparator for Pair. (Следующий код находится в классе Pair)

public final Comparator KEY_COMPARATOR = new Comparator() {
        public int compare(Pair first, Pair second) {
            *first.getKey().compareTo(second.getKey());*
            return 0;
        }
    };

Кодfirst.getKey().compareTo(second.getKey()); выдаст ошибку, говорящую:

The method compareTo(capture#1-of ? extends Object) in the type Comparable is not applicable for the  arguments (T1)

Кто-нибудь знает, что означает это сообщение об ошибке?

Любые намеки на эту тему приветствуются.

ОБНОВИТЬ:

Вот полный код:

public class Pair {
    private T1 key;
    private T2 value;

    public static int ascending = 1;
    public final Comparator KEY_COMPARATOR = new Comparator() {
        public int compare(Pair first, Pair second) {
            int cmp = first.getKey().compareTo((T1)(second.getKey()));
            if (cmp > 0)  return ascending;
            return -ascending;
        }
    };
}

@MarvinLabs Можете ли вы объяснить немного больше, почему компилятор не может убедиться, что объекты сравниваются с другими объектами того же типа? В приведенном выше коде,second.getKey() возвращает тип T1 того же типа, что иfirst.getKey()

Ответы на вопрос(3)

Ваш ответ на вопрос