Удостоверьтесь что Сопоставимая реализация объектов

У меня есть litte проблема, и задавался вопросом, как решить ее. У меня есть универсальный класс Tuple<A,B> и теперь я хотел бы отсортировать их кортежи согласно A и B. Это должно быть похожим на это:

Неотсортированный:

(1,5)
(2,8)
(6,8)
(1,4)
(2,4)

Отсортированный:

(1,4)
(1,5)
(2,4)
(2,8)
(6,8)

По этой причине я думал о реализации дженерика, сравнивают метод (public int compareTo(Tuple<A, B> other)) в классе Кортежа. Единственная проблема состоит в том, что все объекты, для которых Вы могли параметризовать класс (например, A=Integer, B=String) должны реализовать compareTo метод также для этой целой вещи работать.

Существует ли способ гарантировать, чтобы все объекты, которые может содержать Кортеж, реализовали интерфейс Comparable?

Или есть ли какие-либо другие предложения о том, как решить эту проблему?

Спасибо

5
задан Michael Myers 2 July 2010 в 15:01
поделиться

3 ответа

Вы можете использовать границы рекурсивного типа (см. Также Правило 27 из Эффективная Java ), чтобы указать, что компоненты кортежа расширяют Comparable, например:

 public class Tuple<A extends Comparable<? super A>, B extends Comparable<? super A>> implements Comparable<Tuple<A, B>> {
    A valueA;
    B valueB;

    @Override
    public int compareTo(Tuple<A, B> tuple) {
        // Implement comparison logic
        return 0;
    }
}

Это позволяет вам определять разные типы для компоненты кортежа (Tuple ).

5
ответ дан 18 December 2019 в 14:42
поделиться

Это должно помочь. Любой указанный вами класс должен будет расширить Comparable.

public class Tuple<? extends Comparable> {
}
1
ответ дан 18 December 2019 в 14:42
поделиться

Если вы объявляете класс как

public class Tuple<A extends Comparable<? super A>,
                   B extends Comparable<? super B>> { ...

, это гарантирует, что и A, и B будут самосопоставимыми. Затем вы можете вызвать compareTo () для любого объекта типа A или B, который есть в вашем классе.

7
ответ дан 18 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: