Передача универсального типа во вложенный запечатанный класс
Является ли это возможным? Как я могу объяснить компилятору, что это тот же тип (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)