Реактивные потоки работают только с объектами (вы никогда не можете передавать null
), и, поскольку Void
никогда не может быть создан, вы никогда не сможете отправлять какие-либо значения - только сигнал завершения.
Я не совсем уверен в случае использования здесь, но есть два разных подхода, которые вы можете вспомнить этой весной:
Если вам никогда не нужно значение, Вы можете просто сопоставить Object
, то есть
Flux<Object> events = getFilesystemChanges().map(p -> new Object());
Затем вы можете просто использовать events.startWith(new Object())
и продолжить. (Вы можете выбрать более подходящий тип, чем Object
, если хотите, или создать свой собственный.)
Если вам нужны фактические значения, но иногда нужно просто вставить ваши собственные "фиктивные" значения, тогда вы можете иметь поток Optional<Path>
вместо этого:
Flux<Optional<Path>> events = getFilesystemChanges().map(Optional::of);
Тогда вы можете сделать events.startWith(Optional.empty())
, чтобы добавить "фиктивный" путь к потоку.
FWIW, второй подход, который я часто использовал для функций типа «сердцебиение», где я хочу, чтобы был выдан поток значений, но также хочу, чтобы активность сохранялась один раз в каждый (временной период) для сохранения Основная связь жива. Во втором случае я часто использую пустые опции.