Дематериализация в RxJava2 возвращает только тип объекта Observable - PullRequest
0 голосов
/ 29 октября 2018

При использовании dematerialize объект Observable, возвращаемый функцией .dematerialize (), всегда имеет тип Object, а не мой исходный тип. Пример здесь (использование IntelliJ в проекте Android)

import org.junit.Test;

import io.reactivex.Observable;
import io.reactivex.observers.TestObserver;

public class RxTest {
    @Test
    public void test() {
        Observable<String> wrongObservable = ((Observable<String>) Observable.just("Test").materialize().dematerialize());
        Observable<String> castedObservable = Observable.just("Test").materialize().dematerialize().map(i -> (String)i);
        TestObserver<String> testObserver = new TestObserver<>();
        castedObservable.subscribe(testObserver);
        testObserver.assertValueCount(1);
        testObserver.assertValue("Test");

    }

}

Этот код покажет ошибку в первой строке тестовой функции

error: incompatible types: Observable<Object> cannot be converted to Observable<String>

Если после этого я выполняю приведение к карте-вызову (как показано на следующей строке), все, похоже, работает нормально. Что я тут не так делаю?

1 Ответ

0 голосов
/ 29 октября 2018

Как объяснено в комментарии akarnokd , это ограничение Java. Это можно решить, добавив аргумент типа, такой как:

.<String>dematerialize()
...