在here
中解决了一个问题interface IRemoteData<T> {
fun getJsonPOJO() : T?
}
class RemoteData<T>(response: Response<ResponseBody>, pojoClassType: Class<T>) : IRemoteData<T> {
private var mData: T? = null
override fun getJsonPOJO(): T? {
return mData
}
}
现在创建了一个RemoteData实例
val remoteData = RemoteData(response, POJOClazz::class.java)
将此remoteData传递给采用泛型类型的函数时会出现另一个错误
handler.onRemoteDataReady(remoteData)
//<=== got Type mismatch: inferred type is RemoteData<out Class<T>> but IRemoteData<T>? was expected
在d:T?
的界面中定义函数interface IHandler<T> {
fun onRemoteDataReady(data :T?)
}
处理程序实例:
class ResponseHandler(val action: Action) : BaseHandler(action), IHandler<IRemoteData> {
init {
mAction?.preAction(this)
}
override fun onRemoteDataReady(data: IRemoteData?) {
val responseRecieved = data?.getJsonPOJO()
.......
}
}
答案 0 :(得分:1)
如评论中所述,接口IRemoteData
需要通用类型。
以下是工作示例:
interface IHandler<T> {
fun onRemoteDataReady(data :T?)
}
class ResponseHandler<T>(val action: Action) : BaseHandler(action), IHandler<IRemoteData<T>> {
override fun onRemoteDataReady(data: IRemoteData<T>?) {
val responseReceived = data?.getJsonPOJO()
}
}
它的用法:
val remoteData = RemoteData(response, POJOClazz::class.java)
val handler = ResponseHandler<POJOClazz::class.java>(action)
handler.onRemoteDataReady(remoteData)
请记住,在上一个答案中,您的界面IRemoteData
需要一种类型。因此,当您声明ResponseHandler
类时,您还需要指定类型。 ResponseHandler<String>
将实施IRemoteData<String>
。