如何解决你如何访问 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 编译)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。