偶然发现不兼容的类型错误原因,我不明白。
错误:类型不兼容:Flowable无法转换为Flowable 其中T是类型变量: T扩展了在方法getPackets(Class)中声明的Packet
为什么这段代码是错误的?
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)
答案 0 :(得分:1)
return getPackets().filter(type::isInstance);
返回类型为getPackets()
的{{1}}的筛选视图。
但是,Flowable<Packet>
可以是T
的任何子类,而不仅仅是Packet
。而且由于Java泛型是不变的(例如Packet
不是List<Dog>
),所以这是不兼容的。
您需要投放List<Animal>
:
Flowable
答案 1 :(得分:1)
通过使用ofType()而不是filter()对其进行了修复。