当前位置: 首页 > 知识库问答 >
问题:

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

公孙茂学
2023-03-14
public Flowable<Packet> getPackets() {
        .....
}

public <T extends Packet> Flowable<T> getPackets(Class<T> type) {

    return getPackets().filter(type::isInstance);
}

flowablefilter()RXJava的一部分,filter()如下所示:

public final Flowable<T> filter(Predicate<? super T> predicate)

共有1个答案

云宏儒
2023-03-14
return getPackets().filter(type::isInstance);

返回getpackets()的筛选视图,其类型为flowable

但是,t可以是packet的任何子类,而不仅仅是packet。而且由于Java泛型是不变的(例如list 不是list ),所以这是不兼容的。

您需要强制转换flowable:

return getPackets().filter(type::isInstance).map(type::cast);
 类似资料:
  • 我定义jackoson序列化器并将其添加到java类中,如下所示: 编译器出现以下错误: 注释的定义为: 如果我从ReportFilterDeserializer中删除泛型attibute,它将通过编译。我不明白编辑为什么抱怨。

  • 我正在尝试使用reverfit和RxJava在我正在使用的应用程序中的自定义视图中进行API调用,但是当我尝试订阅来自我的reverfit API调用的Observable时,遇到了一个不兼容类型错误。 我的改装界面: } 和位于自定义视图的onFinishInflate()中的改装调用: 当我构建项目时,在自定义视图中以可观察的 query=...开头的行中遇到了不兼容类型错误: 错误:(60,

  • 我是一名java初学者,我正在阅读“Java初学者指南”这本书和泛型的主题。作者创建了以下泛型类: 在这种情况下,类型参数必须是Number或Number的子类。 作者说,如果我们添加一个新方法来检查存储在两个通用对象中的数值绝对值,如下所示: 用它写的解释是: 这里,使用标准方法Math.abs()获取每个数字的绝对值,然后进行数值比较,这种尝试的麻烦在于,它只会对类型与调用对象相同的其他Num

  • 这基本上是我第一次接触Java泛型类型,我不知道下面的代码有什么问题。 我有一个helper类,它具有一个静态函数inRange-usng-generic类型,该函数应该从输入列表中返回对象列表,这些对象在索引处的对象周围的特定范围内(我还没有测试它,如果它工作正常与否,这不是问题): 然后我想在一个类中使用它: 类型为

  • 在stackoverflow中还没有讨论的情况下,我遇到了“不兼容类型”编译器错误(例如,为什么这个通用java代码不能编译?)。 我的期望很简单--我调用的是一个模板化方法,它不使用包含类的任何“泛型”类,因此它应该从方法参数中提取模板参数的类型,并且在所有情况下都应该编译--但我得到了“不兼容类型”编译器错误。 我注意到解决这个问题的奇怪方法--在方法参数中向泛型datatype添加“<?ex