Próbuję zrozumieć cel tej biblioteki przez Jake Warthon: https://github.com/JakeWharton/RxRelayRxJava Relay vs Przedmioty
Zasadniczo: Przedmiotem wyjątkiem bez możliwości wywołania onComplete lub onError. Przedmioty są bardzo szkodliwe dla stanu: po otrzymaniu onComplete lub onError przestają być przydatne do przenoszenia danych.
Wpadam na pomysł, jest to ważny przypadek użycia, ale powyższe wydaje się łatwe do osiągnięcia po prostu przy użyciu istniejących obiektów.
1. nie przesyłać errors
/completions
zdarzenia do tematu:
`observable.subscribe({ subject.onNext(it) }, { log error/throw exception },{ ... })`
2. Nie wystawiać przedmiot, zrobić podpis sposób zauważalny powrót zamiast.
fun(): Observable<> { return subject }
Ja oczywiście brakuje czegoś tutaj i jestem bardzo osobliwości na temat tego, co to jest!
class MyPublishRelay<I> : Consumer<I> {
private val subject: Subject<I> = PublishSubject.create<I>()
override fun accept(intent: I) = subject.onNext(intent)
fun subscribe(): Disposable = subject.subscribe()
fun subscribe(c: Consumer<in I>): Disposable = subject.subscribe(c)
//.. OTHER SUBSCRIBE OVERLOADS
}
Dzięki akarnokd, Dobrze wiedzieć, że niczego mi nie brakuje :) Odnosząc się do # 2, jeśli umieścisz swój przedmiot w klasie otoki, możesz mieć metodę accept (przedmiot) {subject.omNext (item)}. I Temat pozostaje prywatnym polem – feresr
Czy jesteś pewien, że to jedyny powód? Stworzenie zupełnie nowej biblioteki, aby uniknąć błędów początkujących, wydaje się przesadą. Więc importujesz go do swoich projektów. – feresr
Masz na myśli [to] (https://github.com/JakeWharton/RxRelay/issues/30)? Ponieważ elementy wewnętrzne są w większości takie same, jak standardowe obiekty, a usunięcie obsługi zdarzeń terminalowych nie jest znaczącą wygraną wydajnościową, pozostawia nam to, co napisałem. – akarnokd