使用泛型和rxjava的不兼容类型
偶然发现了不兼容的错误类型,我不理解其原因 错误:不兼容的类型:无法将可流动转换为可流动 其中T是一个类型变量: T扩展方法getPackets(类)中声明的数据包 为什么这段代码是错误的使用泛型和rxjava的不兼容类型,java,generics,lambda,rx-java,Java,Generics,Lambda,Rx Java,偶然发现了不兼容的错误类型,我不理解其原因 错误:不兼容的类型:无法将可流动转换为可流动 其中T是一个类型变量: T扩展方法getPackets(类)中声明的数据包 为什么这段代码是错误的 public-Flowable-getPackets(){ ..... } 公共可流动getPackets(类类型){ 返回getPackets().filter(类型::isInstance); } Flowable和filter()是rxjava的一部分,filter()如下所示: 公共最终可流动过滤器
public-Flowable-getPackets(){
.....
}
公共可流动getPackets(类类型){
返回getPackets().filter(类型::isInstance);
}
Flowable
和filter()
是rxjava
的一部分,filter()
如下所示:
公共最终可流动过滤器(谓词
返回getPackets()
的筛选视图,该视图的类型为可流动
但是,T
可以是Packet
的任何子类,而不仅仅是Packet
。而且由于Java泛型是不变的(例如List
不是列表
),这是不兼容的
您需要强制转换可流动的
:
return getPackets().filter(type::isInstance).map(type::cast);
返回getPackets()
的筛选视图,该视图的类型为可流动
但是,T
可以是Packet
的任何子类,而不仅仅是Packet
。而且由于Java泛型是不变的(例如List
不是列表
),这是不兼容的
您需要强制转换可流动的
:
return getPackets().filter(type::isInstance).map(type::cast);
通过使用ofType()而不是filter()修复了它。通过使用ofType()而不是filter()修复了它。在哪一行发生了错误?您能提供一个吗?在哪一行发生了错误?您能提供一个吗?