我遇到了一个有趣的问题
我有以下方法
@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/