当前位置: 首页 > 知识库问答 >
问题:

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

罗智刚
2023-03-14

我在代码中导入了一个使用密封类作为错误处理的库。该库是用静态编程语言编写的,我的代码是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>()
}

我需要访问成功的数据,并知道它何时抛出错误。静态编程语言中的代码工作原理如下:

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

我完全不知道如何将它翻译成Java,也没有找到任何文章/文档来帮助我。

共有1个答案

鲜于意
2023-03-14

它说它无法访问科特林。.

问题可能不是< code>Resource密封类,而是您试图调用的< code>fetchDog函数很可能是Kotlin中的< code>suspend函数(使用Kotlin协程)。

您可以检查这个特定问题的另一个答案。它基本上归结为从静态编程语言代码中提供一个非挂起函数,您可以从Java调用它。

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

 类似资料:
  • 我有下面的Kotlin代码。一个名为的密封类和两个对象类和继承自密封类。我在is Cat情况下的子句中得到这个错误。 为什么会给出这个错误?如何使用Kotlin中的密封类来进行这种类型的操作?密封类是做多态的好选择吗?

  • 下面的代码在无法通过条件颜色时编译。深色和彩色。浅色,因为这两个类是抽象的。 我错过什么了吗?

  • 不工作的Kotlin代码如下所示: 我省略了(我相信)没有必要重现这个问题的代码。 Kotlin代码实际上是编译的,但在运行时,它在线程“main”java.lang.IllegalAccesserRor中抛出访问类foo.bar.utils.foo$bar$qux。当悬停在上时,IntelliJ显示一个提示,提示中定义了:public/*package*/open class Qux,所以在此上

  • 数据类可以扩展密封类,但不是,我不确定它们如何/是否能够接受“supertype”密封类所需的参数。 > 从密封类扩展常规类可以很好地编译。 但是,将其更改为数据类并不编译(“数据类主构造函数必须只具有属性(val/var)参数”)。 否则,我的选择似乎是使用选项1处理我自己的数据类功能(copy、hashcode、equals等),或者通过使用选项4打开超类型属性来进行折衷。

  • 主要内容:数据类,密封类数据类 Kotlin 可以创建一个只包含数据的类,关键字为 data: 编译器会自动的从主构造函数中根据所有声明的属性提取以下函数: / 格式如 对应于属性,按声明顺序排列 函数 如果这些函数在类中已经被明确定义了,或者从超类中继承而来,就不再会生成。 为了保证生成代码的一致性以及有意义,数据类需要满足以下条件: 主构造函数至少包含一个参数。 所有的主构造函数的参数必须标识为 或者 ; 数据类不可

  • 数据类 Kotlin 可以创建一个只包含数据的类,关键字为 data: data class User(val name: String, val age: Int) 编译器会自动的从主构造函数中根据所有声明的属性提取以下函数: equals() / hashCode() toString() 格式如 "User(name=John, age=42)" componentN() functio