如何从java类访问kotlin代码

yks3o0rb  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(314)

嗨,我有一个kotlin用例,我想从java代码调用它,我怎么能做到这一点。这就是我尝试过的
这是我的用例

@PerApp
class OnStandUseCase @Inject constructor(
    private val orderRepository: OrderRepository,
    private val serviceOrderTypeProvider: ServiceOrderTypeProvider
) : UseCaseCoroutine<GenericResponse, OnStandUseCase.Params>() {

    override suspend fun run(params: Params) = orderRepository.notifyOnStand(
        serviceOrderTypeProvider.apiPathFor(params.serviceType),
        params.id,
        params.action
    )

    data class Params(val serviceType: String, val id: String, val action: TimestampedAction)
}

用例协同程序

abstract class UseCaseCoroutine<out Type, in Params> where Type : Any {

    abstract suspend fun run(params: Params): Type

    operator fun invoke(params: Params, onResult: (type: Type) -> Unit = {}) {
        val job = GlobalScope.async(Dispatchers.IO) { run(params) }
        GlobalScope.launch(Dispatchers.Main) { onResult(job.await()) }
    }
}

我在Kotlin的课上就是这么说的

try {
            onStandUseCase(OnStandUseCase.Params(serviceType, id, action)) {
                callback.invoke(it)
            }
        } catch (exception: Exception) {
            onStandResponseErrors()
        }

但是从java类调用的等价函数是什么呢
这就是我试过的

onStandUseCase.run(new OnStandUseCase.Params("abcd", "1", new TimestampedAction("1","2"))){

        }

我出错了 Expected 2 arguments but found only one 不确定从java代码中调用用例的正确方法是什么
有什么建议吗
谢谢,r

frebpwbc

frebpwbc1#

你不能打电话 suspend 来自java的函数(从技术上讲,你可以做到,但正确地做到这一点是非常困难的,我强烈建议你尽量避免尝试。)
在kotlin代码中,编写一个不是挂起函数的函数,该函数将其转换为适当的java习惯用法——rxjava结果或将来的结果。而是从java调用该方法。

相关问题