[英]RxJava Single/Observable return implementation of interface
我遇到了有趣的問題
我有以下方法
@Override
public Single<IResults> getResults() {
return Single.just(new ConcreteResults());
}
IResults是接口, ConcreteResults是實現。
但是我遇到一個錯誤
Error:(149, 27) error: incompatible types: Single<ConcreteResults> cannot be converted to Single<IResults>
如何解決這個問題? 我需要一個接口來抽象返回類型。
但是,這個骯臟的把戲似乎有效:)
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 ConcreteResults不是IResults的Single的子類型。 您需要使用通配符在
您可以在此處搜索有關它的更多信息: https : //docs.oracle.com/javase/tutorial/java/generics/subtyping.html
您需要先創建變量,然后再返回值。 編譯器會發現IResult是ConcretResult的過度類型。 如果立即返回,編譯器將無法獲取。
@Test
void name() {
Single<IResult> result = getResult();
}
private Single<IResult> getResult() {
Single<IResult> just = Single.just(new Result());
return just;
}
interface IResult {
}
class Result implements IResult {
}
對於1_7設置,您必須使用:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
您必須提供編譯器指針,因為在1_7中,編譯器不會從定義中推斷類型。
private Single<IResult> getResult() {
Single<IResult> just = Single.<IResult>just(new Result());
return just;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.