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

时间:2017-07-28 05:45:29

标签: java 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?

1 个答案:

答案 0 :(得分:7)

您在Java中拥有的是原始类型。在star-projections部分,Kotlin文档说:

  

注意:star-projection非常类似于Java的原始类型,但是很安全。

他们描述了他们的用例:

  

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

因此,您的APIError班级成为:

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