2016-05-07 3 views
1

Пока я экспериментировал с новым потоком java-8, я хотел заглянуть под капот и посмотреть, как его методы реализованы, поэтому я взглянул на реализацию класса Stream и нашел, что все методы являются абстрактными.Как реализованы методы Stream в java-8?

Мой вопрос в том, как методы, подобные distinct() и map(), работают, он должен иметь конкретную реализацию где-нибудь, где эти методы?

ответ

4

После некоторого исследования выясняется, класс, который я искал это ReferencePipeline, который, как Brian Goetz сказал протягивается от AbstractPipeline, и лучше смотреть на него, прежде чем ReferencePipeline.

и мы получаем объект из этого класса, когда создаем Stream на Arrays.stream() или вызываем stream() на List объект или любым другим способом.

так что это просто базовый полиморфизм.

+4

К сожалению, черная магия не связана с да. :) – Tunaki

+4

ха-ха, это то, о чем я думал сначала, когда я не видел каких-либо реализованных я думаю, что это может быть родные методы или что-то новое в java-8 или какая-то черная магия, но оказывается, что это просто регулярный полиморфизм. – humazed

+4

Основная реализация - AbstractPipeline, которая расширена ReferencePipeline, IntPipeline и т. Д., Которые, в свою очередь, реализуют Stream , IntStream и т. Д. Никакой магии. –

Смежные вопросы