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

时间:2017-08-29 16:52:30

标签: 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

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

我该怎么做?

1 个答案:

答案 0 :(得分:3)

您的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