Я знаю, что вам следует избегать этого любой ценой, но что, если у меня есть допустимый прецедент для подкласса Observable в RxJava? Является ли это возможным? Как я могу это сделать?
В этом конкретном случае у меня есть класс "репозиторий", который в настоящее время возвращает запросы:
class Request<T> {
public abstract Object key();
public abstract Observable<T> asObservable();
[...]
public Request<T> transform(Func1<Request<T>, Observable<T>> transformation) {
Request<T> self = this;
return new Request<T>() {
@Override public Object key() { return self.key; }
@Override public Observable<T> asObservable() { return transformation.call(self); }
}
}
}
Затем я использую метод преобразования для изменения наблюдаемого ответа (asObservable) в контексте, где мне нужен ключ запроса (например, кэширование):
service.getItemList() // <- returns a Request<List<Item>>
.transform(r -> r.asObservable()
// The activity is the current Activity in Android
.compose(Operators.ensureThereIsAnAccount(activity))
// The cache comes last because we don't need auth for cached responses
.compose(cache.cacheTransformation(r.key())))
.asObservable()
[... your common RxJava code ...]
Теперь было бы очень удобно, если бы мой класс Request был подклассом Observable, так как тогда я мог бы удалить все вызовы .asObservable(), и клиенты даже не знали бы о моем классе Request.