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 МБ.

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