API коллекций Java: отсутствует суперинтерфейс последовательности (упорядоченной коллекции) для List и Deque?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 API коллекций Java: отсутствует суперинтерфейс последовательности (упорядоченной коллекции) для List и Deque?

Сообщение Anonymous »

Мне нужно предоставить API-интерфейс Consumer(sequence) ниже, который требует, чтобы его коллекция последовательностей аргументов была упорядочена, как показано в приведенном ниже отрывке:

Код: Выделить всё

interface Consumer {
/**
* @param sequence: an *ordered* collection of Ts to be processed in order
*/
public void consume(Collection sequence);
}

interface Producer {
Collection getSequence();
}

class Producer1 implements Producer {
public List getSequence() {
return new ArrayList();
}
}
class Producer2 implements Producer {
public Deque getSequence() {
return new LinkedList();
}
}

class Test {
void testMethod(Consumer consumer) {
consumer.consume(new Producer1().getSequence());
consumer.consume(new Producer2().getSequence());
}
}
Обычно можно указать метод Consumer(), принимающий список; однако некоторые производители также предоставляют Deque, чтобы облегчить такие вещи, как эффективная обратная итерация с использованием DowningIterator(). Однако Deque не расширяет List, и для этого, вероятно, есть веские причины (затраты O(n) на доступ к индексированному элементу в LinkedList).
Поэтому кажется, что единственный способ «обеспечить комфорт компилятора» — это указать последовательность как коллекцию; однако, согласно Javadoc (и, как мы все знаем), «некоторые упорядочены, а другие неупорядочены», поэтому API Consumer() теряет семантику.
Другой обходным решением было бы сделать так, чтобы Producer2 предоставлял LinkedList, а не Deque (и возвращал Consumer() для принятия списка), но мы знаем, что это не идеально предоставлять реализации, а не интерфейсы.
Кажется, идеальным решением для Java было бы предоставление суперинтерфейса Sequence для List и Deque (расширение Iterable). Я могу предположить, что одной из причин, по которой этого не было сделано, является сложность, но я думаю, что этот пример демонстрирует необходимость.
Я упускаю лучшую стратегию или мне просто нужно дождаться пересмотра API? Для справки: это Java 17.

Подробнее здесь: https://stackoverflow.com/questions/721 ... terface-of
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Является ли `[] (std :: list и list) {return std :: move (list);} (list)` гарантированно оставить `list` yelm?
    Anonymous » » в форуме C++
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Std: Переместите std :: string из std :: deque then std :: deque :: pop_front?
    Anonymous » » в форуме C++
    0 Ответы
    67 Просмотры
    Последнее сообщение Anonymous
  • Std: Переместите std :: string из std :: deque then std :: deque :: pop_front?
    Anonymous » » в форуме C++
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Есть ли лучший способ сохранить вектор в упорядоченной последовательности в C ++?
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Когда/где будет использовать (хэшсет + список) над LinkedHashset для уникальной и упорядоченной коллекции объектов?
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»