嗨,我有一个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
1条答案
按热度按时间frebpwbc1#
你不能打电话
suspend
来自java的函数(从技术上讲,你可以做到,但正确地做到这一点是非常困难的,我强烈建议你尽量避免尝试。)在kotlin代码中,编写一个不是挂起函数的函数,该函数将其转换为适当的java习惯用法——rxjava结果或将来的结果。而是从java调用该方法。