Ответ
Subject в RxJava — это гибридный тип потока данных, который одновременно является и Observer, и Observable. Он может принимать события (как Observer) и эмитировать их подписчикам (как Observable).
Основные виды Subject:
- PublishSubject: эмитит только новые события после подписки.
- BehaviorSubject: хранит последнее значение и эмитит его новым подписчикам.
- ReplaySubject: сохраняет все (или N) события и эмитит их новым подписчикам.
- AsyncSubject: эмитит только последнее значение при завершении.
Пример:
val subject = PublishSubject.create<Int>()
subject.subscribe { println("Subscriber 1: $it") }
subject.onNext(1)
subject.subscribe { println("Subscriber 2: $it") }
subject.onNext(2)
// Вывод:
// Subscriber 1: 1
// Subscriber 1: 2
// Subscriber 2: 2