Почему PrimitiveIterator.OfInt
простирается Iterator<Integer>
, но IntStream
не распространяется Stream<Integer>
?Несогласованность примитивных специализаций в Java 8
Я пытаюсь создать примитивный тип коллекции (аналогично интерфейсам из библиотеки примитивов Apache Commons (http://commons.apache.org/dormant/commons-primitives/) и пытается быть последовательным и совместимым с библиотекой коллекций, но я не могу решить, должен ли я сделать мой ByteList
продлить List<Byte>
или нет.
Я думаю, что это потому, что Iterator
имеет прямую поддержку синтаксиса в языке (т.е. для циклов с использованием итераторов), так что стоит сделать итератор совместимым с этим синтаксисом, даже если это заставляет бокс, но мне любопытно, если кто-нибудь знает, если есть более глубокая причина. Спасибо!
Мое предположение заключается в том, что они хотели избежать загромождения интерфейса - чтобы расширить «поток», им пришлось бы хранить все методы, дублируя их с примитивной версией. Возможно, тот факт, что интерфейс для «Итератора» намного меньше (всего два метода, дублирующихся на примитивный тип), в этом случае чувствовал себя приемлемым для дизайнеров. – Hulk
'PrimitiveIterator.OfInt' не имеет прямых конфликтов имен с' Iterator'; он добавляет только один метод 'nextInt', тогда как' IntStream' имеет всевозможные различные методы, особенно 'filter', которые не могут быть действительно перегружены с помощью' IntPredicate', а также 'Predicate'. –
Примитивные версии 'Spliterator', соответствующие примитивным итераторам, например. [Spliterator.OfInt] (https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.OfInt.html), реализовать свой общий суперинтерфейс 'Spliterator' a, предоставить как оболочку, так и примитив версии для своих методов. Но в любом случае у них есть только два метода, и перегрузка там прекрасна. –
Hulk