kotlin - kotlin 中的密封类泛型与内部类无关

标签 kotlin

我想要一个ApiResponse使用一些通用类型来知道成功时将包含什么类型,例如:;

我的意思是,我假装的是:

sealed class ApiResponse<T> {
  class Success<T>(body: T)
}

fun getUsers(): ApiResponse<List<User>>

然后当我调用getUsers时我知道它可能包含 ApiResponse.Success<List<User>> .

但是 T来自ApiResponse<T>Success<T> 无关因为我可以这样写:

sealed class ApiResponse<NotUsed> {
  class Success<T>(body: T)
}

然后我创建一个返回 ApiResponse 的函数像:

fun getUsers(): ApiResponse

我不知道如果成功的话,响应可能包含哪种对象。

我该怎么做?

最佳答案

您的 Success 类除了在其内部范围之外与您的 ApiResponse 类没有任何关系。如果您希望 Success 成为 ApiResponse,您应该执行类似以下操作,这也会关联泛型类型:

sealed class ApiResponse<T> {
    class Success<T>(body: T) : ApiResponse<T>()  // Success extends ApiResponse
}

请注意,它们只需位于同一个文件中,不一定是嵌套的(自 Kotlin 1.1 起),因此以下内容也适用:

sealed class ApiResponse<T>

class Success<T>(body: T) : ApiResponse<T>()  // Success extends ApiResponse

关于kotlin - kotlin 中的密封类泛型与内部类无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45944480/

相关文章:

android - 驼峰包名时的数据绑定(bind)库

java - 不推荐在没有设置文件的情况下执行 Gradle : How to write a setting file and where to save

android - 如何重用相同的 Kotlin Flow 来执行相同的代码

arrays - 如何将 CharArray/Array<Char> 转换为字符串?

kotlin - zip 3个等长列表

java - 如何在 WorkManager 中处理应用程序终止场景?(解决方法)

android - 通过 Kotlin DSL 从 local.properties 读取值

android - 如何在 android 中制作分享按钮 - Kotlin

java - 热至 "flatten"TornadoFX(JavaFX 扩展)中 ObjectProperty 的 ObjectProperty?

android - Kotlin中使用改造的 socket 连接