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