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

作为任何RX操作符调用java类内的扩展函数

锺离嘉容
2023-03-14

我创建了一个扩展函数,

fun <T> Observable<T>.subscribeWithErrorHandling(onNext: (T) -> Unit ,onError: ((throwable: Throwable) -> Unit)? = null): Subscription {
//doing stuff
}

在kotlin课堂上,我将能够以这种方式毫无问题地使用它

可见。订阅错误处理(…)

现在,我想在我的java类中也使用这个函数。我已经看到您可以静态地调用它,如:

MyExtensionFile。订阅错误处理

但在我的情况下,你需要一些其他的东西,因为它是一个接收流的中间。这就是我一直坚持的部分。这可能吗?或者没有办法从java代码中执行类似的操作?


共有2个答案

皮安顺
2023-03-14

扩展功能是kotlin相对于Java的优势之一。使用kotlin编码可以提供这些优势,但不幸的是,这并不意味着可以在Java代码中使用kotlin语言特性。

解决方案:将您希望使用扩展函数的模块移植到kotlin。

左丘宜年
2023-03-14

简单的回答。No

解释-我认为这是不可能的,因为这意味着您正在扩展抽象的可观察的类。静态编程语言扩展通过移出继承树添加了相同的功能,Java您几乎无法摆脱继承。

所以剩下的唯一选择是扩展基本的可观察的类,并创建您自己的实现,我认为这在您的情况下是不需要的。一个简单的解决方案是为Java创建一个新方法,它可以采取可观察的并执行所需的逻辑。或者创建一个自定义类,将可观察的实例作为其实例成员,然后在其中编写所需的方法(标准的OOPS方式)。这些代码可以从静态编程语言以及Java中使用。

编辑:我相信你已经知道这一点,但仍然会向你指出这个问题。

 类似资料:
  • 我们不需要去扩展我们自己的类,但是我需要去使用扩展函数扩展我们已经存在的类来让第三方的库能提供更多的操作。几个例子,我们可以去像访问List的方式去访问ViewGroup的view: operator fun ViewGroup.get(position: Int): View = getChildAt(position) 现在真的可以非常简单地从一个ViewGroup中通过position得到一

  • 我正在尝试使用具体化类型的函数作为扩展函数,但我认为这是不可能的,因为在我检查生成的字节码后,我发现方法签名是私有的,有什么办法可以将其公开? CommonExtensions.kt 静态编程语言字节码: 客户代码: 静态编程语言文件 Java档案

  • 扩展资源和操作类 包括一系列资源在数据库中对应的记录和操作,这些模块的格式都很相似,一般包括若干个静态资源类和一个操作的mixin实现类。这个mixin类一般都是扩展核心plugin的资源、方法等支持,即提供扩展资源操作,一般继承自extension包中对应的基础类。

  • 问题 你想编写一个C扩展函数来操作数组,可能是被array模块或类似Numpy库所创建。 不过,你想让你的函数更加通用,而不是针对某个特定的库所生成的数组。 解决方案 为了能让接受和处理数组具有可移植性,你需要使用到 Buffer Protocol . 下面是一个手写的C扩展函数例子, 用来接受数组数据并调用本章开篇部分的 avg(double *buf, int len) 函数: /* Call

  • 本文向大家介绍Thinkphp 框架扩展之类库扩展操作详解,包括了Thinkphp 框架扩展之类库扩展操作详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Thinkphp 框架扩展之类库扩展操作。分享给大家供大家参考,具体如下: 类库扩展 ThinkPHP的类库主要包括公共类库和应用类库,都是基于命名空间进行定义和扩展的。只要按照规范定义,都可以实现自动加载。 公共类库 公共类库通常是

  • 需要帮助!关于Salesforce Apex计划课程的问题。 我需要从视觉力页面调用一个动作,该动作位于顶点类上。顶点类太长了,但动作完全从VF页面工作。 下面是代码的示例版本。但计划类不起作用,只需不断给出错误以保存即可。 VF页面 以下是我无法使用的代码: 任何人都知道如何从VF或Apex类调用操作