Sobes.tech
Junior — Middle

Milyen típusú adatfolyamot képvisel egy Subject az RxJava-ban, és miben különbözik a többi típustól?

sobes.tech MI

Válasz az MI-től

RxJava-ban a Subject egy speciális adatfolyam típus, amely egyszerre Observable és Observer is. Ez azt jelenti, hogy képes adatokat kibocsátani (előfizetőknek), és fogadni is (más Observable-ektől).

A Subject és egy normál Observable közötti különbségek:

  • Multicast: A Subject lehetővé teszi több előfizető számára, hogy ugyanazokat az adatokat kapják meg, szemben a normál Observable-kkel, amelyek alapértelmezés szerint unicast-ok.
  • Események kézi küldése: Programozottan meghívhatod az onNext(), onError(), onComplete() metódusokat egy Subject-en, hogy irányítsd az adatfolyamot.
  • Különböző Subject típusok: Vannak PublishSubject, BehaviorSubject, ReplaySubject és AsyncSubject, mindegyik saját jellemzőkkel az események tárolására és kibocsátására.

Példa a PublishSubject használatára:

PublishSubject<String> subject = PublishSubject.create();

subject.subscribe(item -> System.out.println("Előfizető 1: " + item));

subject.onNext("Helló");
subject.onNext("Világ");

subject.subscribe(item -> System.out.println("Előfizető 2: " + item));

subject.onNext("!");

Ebben a példában a második előfizető csak az "!" eseményt fogja kapni, mivel a PublishSubject nem tárolja a korábbi értékeket.