Хотели бы вы ввести требование, чтобы K
и J
имели естественный порядок, который вы можете использовать? В этом случае вы можете объявить свой класс DoubleKey
следующим образом:
class DoubleKey<K extends Comparable<K>, J extends Comparable<J>>
Затем вы можете определить compareTo
вашего DoubleKey, как вам нравится. Вы можете делать такие вещи, как:
getFirstKey().compareTo(aThat.getFirstKey())
Вы не можете сравнить ни один экземпляр K
с экземпляром J
. Для этих типов порядок не определен.
Если эти типы не обязательно имеют естественное упорядочение (многие не имеют), вы можете взять Comparator<K>
и Comparator<J>
в качестве параметров для конструктора вашего DoubleKey
. Класс, который уже делает это, и который вы можете использовать в качестве примера, это отличный класс Maps Google Guava (см. Конкретно методы newTreeMap
и границы типов, которые они принимают).