在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?
答案 0 :(得分:7)
您在Java中拥有的是原始类型。在star-projections部分,Kotlin文档说:
注意:star-projection非常类似于Java的原始类型,但是很安全。
他们描述了他们的用例:
有时您想说您对类型参数一无所知,但仍希望以安全的方式使用它。这里安全的方法是定义泛型类型的这种投影,该泛型类型的每个具体实例都是该投影的子类型。
因此,您的APIError
班级成为:
class APIError(message: String, val response: APIResponse<*>) : Exception(message) {}