this::a
не зависит от контекста и может означать разные вещи.Вам нужно предоставить некоторый контекст, чтобы помочь компилятору выяснить, что вы на самом деле имели в виду под this::a
.
Stream.<Supplier<String>>of(this::a);
Хотя, похоже, Stream<Supplier<String>>
не то, что вы хотели.Если вам нужен Stream<String>
, используйте Stream.generate
: дополнительная информация о типе не требуется, так как метод принимает Supplier<T>
(здесь нет двусмысленности).
Stream.generate(this::a);
На заметку, оба утверждения ожидают, что высохранить свои результаты в переменные.Определение переменных правильного типа часто облегчает решение таких проблем.
Stream<Supplier<String>> s1 = Stream.of(this::a);
Stream<String> s2 = Stream.generate(this::a);
Все благодарности @ J-Alex и @Holger за их ценные комментарии.