[英]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);
}
Flowable
和filter()
是一部分rxjava
, filter()
看起來是這樣的:
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.