偶然发现不兼容的类型错误,我不明白其原因。
error: incompatible types: Flowable cannot be converted to Flowable where T is a type-variable: T extends Packet declared in method 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()
的过滤 View ,其类型为 Flowable<Packet>
.
但是,T
可以是 Packet
的任何子类,不仅仅是 Packet
。而且由于 Java 泛型是不变的(例如 List<Dog>
不是 List<Animal>
),因此这是不兼容的。
您需要转换 Flowable
:
return getPackets().filter(type::isInstance).map(type::cast);
关于java - 使用泛型和 rxjava 的不兼容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56132919/