如何在Kotlin中声明一个包含泛型类型字段的类?

在Kotlin我有一个数据类。

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给出的错误是:在com.mypackagename中定义的APIResponse类的一个类型参数

在Java中,我可以这样做:

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

我如何将代码转换为Kotlin?

您在Java中拥有的是原始类型 。 Kotlin文档在星形投影部分说:

注意:星形投影非常类似Java的原始类型,但安全。

他们描述了他们的用例:

有时候你想说,你对类型参数一无所知,但仍然想要以一种安全的方式使用它。 这里的安全方法是定义泛型类型的投影,使得泛型类型的每个具体实例都是该投影的子类型。

你的APIError类因此变成:

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