将泛型类型传递给嵌套的密封类

时间:2018-03-20 22:05:32

标签: generics kotlin inner-classes sealed-class

有可能吗? 如何向编译器表明它的同一类型(BR)扩展了同一个类? 下面的代码失败

class BaseRepository<BR: BaseResponse>() {

sealed class BaseSealedResponse {
    open class Success(val receivedValue: BR)
    open class RequestError(val error: HttpException)
}
}

1 个答案:

答案 0 :(得分:1)

不,那是不可能的。只有inner classes可以引用外部类型的类型参数。 sealed类不能标记为inner,因此它只能访问自己的类型参数:

class BaseRepository<BR: BaseResponse>() {
    sealed class BaseSealedResponse {
        open class Success<B: BaseResponse>(val receivedValue: B)
        open class RequestError(val error: HttpException)
    }
}

您可以在BaseRepository中定义一个成员函数,用于创建Success参数化BR的实例:

fun Success(receivedValue: BR) = BaseSealedResponse.Success(receivedValue)