Intereting Posts
Запуск эспрессо-теста несколько раз Обработчик комментариев Kotlin: он не может заставить его работать Как инициализировать var в лямбда Как мы можем реализовать Observable.flatMapCompletable? rx.Scheduler не может быть предоставлен без @ Provides- или @ Produces-аннотированного метода Как получить пакет kotlin путем отражения Единичный тест на функцию расширения Kotlin на Android SDK Classes Ошибка Android Kotlin: «Тип возврата – это« единица », которая не является подтипом переопределенного« Не удается получить доступ к EditText или другим компонентам пользовательского интерфейса с помощью Kotlin Тест JUnit в Котлине Котлин использует, когда для простых условий Android – Как изменить цвет рисования пользовательского вида? Как не передавать данные Flowable для модульных тестов? Недвижимость в интерфейсе не может иметь поле подкладочный Какова альтернатива URLEncodedUtils.format (params, «utf-8») в котлин?

Как объявить класс, содержащий поле с общим типом в Котлин?

В Котлине у меня есть класс данных.

data class APIResponse<out T>(val status: String, val code: Int, val message: String, val data: T?) 

Я хочу объявить еще один класс:

 class APIError(message: String, response: APIResponse) : Exception(message) {} 

но Kotlin дает ошибку: один аргумент типа, ожидаемый для класса APIResponse, определенного в com.mypackagename

В Java я могу это сделать:

 class APIError extends Exception { APIResponse response; public APIError(String message, APIResponse response) { super(message); this.response = response; } } 

Как преобразовать код в Kotlin?

Solutions Collecting From Web of "Как объявить класс, содержащий поле с общим типом в Котлин?"

То, что у вас на Java, является сырым типом . В разделе о звездных проекциях в документации Котлина говорится:

Примечание: звездообразные проекции очень похожи на исходные типы Java, но безопасны.

Они описывают свой прецедент:

Иногда вы хотите сказать, что ничего не знаете о аргументе типа, но все же хотите использовать его безопасным способом. Безопасным способом здесь является определение такой проекции родового типа, что всякое конкретное создание этого родового типа будет подтипом этой проекции.

APIError образом, ваш класс APIError становится следующим:

 class APIError(message: String, val response: APIResponse<*>) : Exception(message) {}