簡體   English   中英

RxJava接口的Single / Observable返回實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM