Как объявить список объектов Java, где каждый реализует Comparable - PullRequest
0 голосов
/ 07 июня 2019

Вот ситуация ...

У меня есть List<Object>, где я должен передать его в довольно общие части моего кода.В некоторых частях список должен быть отсортирован.

Я НЕ буду заранее знать, какой тип объекта находится в списке.Однако в зависимости от того, как используется этот список, я гарантирую, что контракт на Comparable таков, что каждый элемент в списке имеет одинаковый тип и может сравниваться друг с другом.

Другими словамив некоторых случаях реальным типом будет String, в других случаях Date.В других случаях что-то Custom, что implements Comparable<Custom>.

Однако в каждый случай, если реальный тип равен String, all изэлементы в списке будут иметь тип String.

Позвольте мне быть более точным, чтобы немного улучшить этот вопрос ...

Вот класс, над которым я работаю:

public class Thing {
   private Map<String, List<SourcedValue<Object>>> properties;
}

Тогда SourcedValue это:

public class SourcedValue<T> {
  private T value;
  private List<Sources> sources;
}

Итак, как вы предлагаете мне это объявить?

1 Ответ

7 голосов
/ 07 июня 2019

Вам нужно, чтобы все элементы списка были Comparable, а не просто Comparable, сравнимыми друг с другом. Способ обеспечить это на уровне метода - объявить переменную типа с привязкой Comparable к себе. Поскольку Comparable действует как потребитель, PECS (производитель расширяется, потребитель супер) предлагает установить нижнюю границу для аргумента типа самого Comparable.

public <T extends Comparable<? super T>> void yourMethod(List<T> list) {
     // Your implementation here.
}

В зависимости от вашей конкретной ситуации переменная типа T может находиться в классе, а не в методе.

public class YourClass<T extends Comparable<? super T>> {
    public void yourMethod(List<T> list) {
         // Your implementation here.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...