Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用泛型和rxjava的不兼容类型_Java_Generics_Lambda_Rx Java - Fatal编程技术网

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

使用泛型和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()如下所示: 公共最终可流动过滤器

偶然发现了不兼容的错误类型,我不理解其原因

错误:不兼容的类型:无法将可流动转换为可流动 其中T是一个类型变量: T扩展方法getPackets(类)中声明的数据包

为什么这段代码是错误的

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()修复了它。

在哪一行发生了错误?您能提供一个吗?在哪一行发生了错误?您能提供一个吗?