Передача универсального типа во вложенный запечатанный класс

Является ли это возможным? Как я могу объяснить компилятору, что это тот же тип (BR), расширяющий тот же класс? Код ниже не работает

class BaseRepository<BR: BaseResponse>() {

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

1 ответ

Решение

Нет, это невозможно. Только inner классы могут ссылаться на параметры типа внешнего типа. 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)
Другие вопросы по тегам