java - RxJava Single/Observable 返回接口(interface)的实现

标签 java generics rx-java rx-android rx-java2

我遇到了一个有趣的问题

我有以下方法

@Override
public Single<IResults> getResults() {
    return Single.just(new ConcreteResults());
}

IResults 是一个接口(interface),ConcreteResults 是实现。

但是我收到错误

Error:(149, 27) error: incompatible types: Single<ConcreteResults> cannot be converted to Single<IResults>

如何解决这个问题?我需要一个抽象返回类型的接口(interface)。

但是,这个肮脏的伎俩似乎有效:)

Single.just(new ConcreteResults())
                .map(new Function<ConcreteResults, IResults>() {
                    @Override
                    public IResults apply(@NonNull ConcreteResults results) throws Exception {
                        return results;
                    }
                });

最佳答案

用途:

@Override public Single<? extends IResults> getResults() { 
    return Single.just(new ConcreteResults()); 
}

请记住,遗传学的继承有点不同。

虽然 IResults 是 ConcreteResults 的子类型,但 Single of ConcreteResults 不是 Single of IResults 的子类型。您需要使用通配符来创建 then 之间的关系

您可以在这里搜索有关它的更多信息:https://docs.oracle.com/javase/tutorial/java/generics/subtyping.html

关于java - RxJava Single/Observable 返回接口(interface)的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46640028/

相关文章:

json - Play2.2 Scala 中通用案例类与 JSON 之间的自动序列化/反序列化

java - Java 中的下限是排他性的还是包容性的?

c# - 如何使用没有约束的类型参数调用具有泛型约束的方法?

java - 使用 RxJava 主题作为回调包装器

java - 在 RxJava 中组合未知数量的 Observable

java - 从文件中读取数据问题(Java初级语言)

java - 为什么我在设置随机种子后总是得到相同的随机双倍?

java - 简单的按钮数组不起作用

java - 如何将人工智能写入我的应用程序

android - 使用 rxjava 重复条目转换异常