Почему бы и нет?
Вы можете вызвать .stream()
на ArrayList<>
просто отлично. Фактически, следующий фрагмент
ArrayList<Object> arr = new ArrayList<>();
arr.stream();
будет скомпилирован в
0: new #16 // class java/util/ArrayList
3: dup
4: invokespecial #18 // Method java/util/ArrayList."<init>":()V
7: astore_1
8: aload_1
9: invokevirtual #19 // Method java/util/ArrayList.stream:()Ljava/util/stream/Stream;
Но ArrayList<>
(или любой из его суперклассов) не имеет .stream()
метода.
Используемая реализация метода взята из interface Collection
:
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
Но если в какой-то момент ArrayList<>
решит, что он может обеспечить лучший метод .stream()
, то вы не Я не хочу снова компилировать ваш код.
Также реализация (или нереализация) метода .stream()
протекает, и лучше этого избежать.