微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决你如何访问 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 举报,一经查实,本站将立刻删除。