【问题标题】:Convert Kotlin `suspend fun` to Java将 Kotlin `suspend fun` 转换为 Java
【发布时间】:2021-08-16 04:13:14
【问题描述】:

我正在尝试将库从 Kotlin 转换为 Java,但这种方法对我不利:

private suspend fun queryPurchases() {
        val inappResult: PurchasesResult = mBillingClient.queryPurchasesAsync(BillingClient.SkuType.INAPP)
        processPurchases(inappResult.purchasesList, isRestore = true)
        val subsResult: PurchasesResult = mBillingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS)
        processPurchases(subsResult.purchasesList, isRestore = true)
    }

如何在 Java 中处理suspend fun??

【问题讨论】:

  • 我很好奇,移植到Java的原因是什么?最简单的方法是在 Kotlin 中编写包装代码并声明一个非暂停 API,例如使用期货。但这依赖于“允许”编写一些 Kotlin 代码,因此是我的问题。
  • 等等,你想调用从Java挂起函数吗?或者 convert 他们?如果你转换一个挂起函数,你可能只会将问题进一步移动,因为该函数可能会调用其他挂起函数。如果是这种情况,您是否正在转换所有内容?
  • 其实我在第一条评论中提到的东西已经在这里描述过:stackoverflow.com/questions/52869672/…
  • 我正在将库转换为 Java,因为我比 Kotlin 更喜欢它。另外,我想添加新功能,因为我比 Kotlin 更熟悉 Java,所以我更容易维护它。

标签: kotlin


【解决方案1】:

Suspendable 函数是 Kotlin 添加的一个特性并且是它独有的。您无法在 Java 中轻松创建甚至调用挂起函数。

您可以忽略原始函数是可挂起的事实并将其视为常规函数,但如果库广泛使用协程,则可能难以将其移植到 Java。

【讨论】:

    【解决方案2】:

    Java 中最接近的可能是 CompletableFutureReactive Stream

    来自 Spring 生态系统的Project Reactor 是一种流行的 Reactive Streams 实现。

    无论您使用什么技术,以一种保留原始代码并发性的方式进行移植可能都不是一件容易的事。

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 2018-11-26
      • 1970-01-01
      • 2022-10-23
      • 2021-02-03
      • 2019-03-12
      • 2020-11-01
      • 2021-07-24
      相关资源
      最近更新 更多