你如何访问 Kotlin 库密封类作为 Java 中的错误处理?

问题描述

我已将一个库导入到我的代码中,该库使用密封类作为错误处理。该库是用 Kotlin 编写的,而我的代码是用 Java 编写的。除了这条线,一切都还好。

我什至试图保存资源的代码示例:

String dogID = "1234";
DogClient dogClient = new dogClient(); //params not important.
Resource<DogDto> dogDtoResource = dogClient.fetchDog(dogID); //Problem Statement

dogClient.fetchDog(String id) 方法使用名为 Resource 的密封类,它使用数据类来处理错误。当我尝试执行上述操作时,它说它无法访问 Kotlin.coroutines.Continuation。

T 代码中的资源:

sealed class Resource<in T> {
    data class Success<T>(val data: T) : Resource<T>()
    data class Error(val exception: Throwable,val statusCode: Int?) : Resource<Any>()
}

我需要访问 Success 上的数据,并知道它何时引发错误。 Kotlin 中的代码可以像这样 工作:

when(dogClient.fetchDog(dogId)) {
    is Resource.Success -> result.data;
    is Resource.Error -> throw new Exception();

我完全不知道如何将其转换为 Java,并且没有找到任何文章/文档来帮助我。

解决方法

它说它无法访问 Kotlin.coroutines.Continuation

问题可能不是 fetchDog 密封类,而是您尝试调用的 suspend 函数很可能是 Kotlin 中的 composer global update 函数(使用 Kotlin 协程) .

您可以检查 this other answer 以了解此特定问题。它基本上归结为从 Kotlin 代码提供一个非挂起函数,您可以从 Java 调用该函数。

如果你不能修改库,你可以在你的项目中添加一个简单的 Kotlin 文件来编写这个“桥接”函数(但这意味着你需要在你的项目中设置 Kotlin 编译)。