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

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

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) {}