Junior — Middle
Aký typ dátového toku predstavuje Subject v RxJava a čím sa líši od iných typov?
sobes.tech AI
Odpoveď od AI
Subject v RxJava — je špeciálny typ toku dát, ktorý je súčasne Observable aj Observer. To znamená, že môže emitovať dáta (pre odberateľov) a tiež ich prijímať (od iných Observable).
Rozdiely medzi Subject a bežným Observable:
- Multicast: Subject umožňuje viacerým odberateľom dostať rovnaké dáta, na rozdiel od bežných Observable, ktoré sú predvolene unicast.
- Možnosť manuálneho odosielania udalostí: Môžete programovo volať metódy onNext(), onError(), onComplete() na Subject na riadenie toku dát.
- Rôzne typy Subject: Existujú PublishSubject, BehaviorSubject, ReplaySubject a AsyncSubject, každý s vlastnými vlastnosťami v ukladaní a vysielaní udalostí.
Príklad použitia PublishSubject:
PublishSubject<String> subject = PublishSubject.create();
subject.subscribe(item -> System.out.println("Odběratel 1: " + item));
subject.onNext("Ahoj");
subject.onNext("svet");
subject.subscribe(item -> System.out.println("Odběratel 2: " + item));
subject.onNext("!");
Tu druhý odberateľ dostane iba udalosť "!", pretože PublishSubject neukladá predchádzajúce hodnoty.