簡體   English   中英

使用泛型和rxjava的不兼容類型

[英]Incompatible types using generics and rxjava

偶然發現不兼容的類型錯誤原因,我不明白。

錯誤:不兼容的類型:Flowable不能轉換為Flowable,其中T是類型變量:T擴展了在方法getPackets(Class)中聲明的數據包

為什么這段代碼是錯誤的?

public Flowable<Packet> getPackets() {
        .....
}

public <T extends Packet> Flowable<T> getPackets(Class<T> type) {

    return getPackets().filter(type::isInstance);
}

Flowablefilter()是一部分rxjavafilter()看起來是這樣的:

public final Flowable<T> filter(Predicate<? super T> predicate)
return getPackets().filter(type::isInstance);

返回getPackets()的過濾視圖,該視圖的類型為getPackets() Flowable<Packet>

但是, T可以是Packet 任何子類,而不僅僅是Packet 而且由於Java泛型是不變的(例如List<Dog>不是List<Animal> ),所以這是不兼容的。

您需要Flowable

return getPackets().filter(type::isInstance).map(type::cast);

通過使用ofType()而不是filter()對其進行了修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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