Что такое Subject в RxJava

«Что такое Subject в RxJava» — вопрос из категории Реактивное программирование, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Используется для мультикастинга событий или как мост между реактивным и императивным кодом.