Generics 如何将泛型数据传递给采用泛型类型的函数
有一个问题解决了吗 将此remoteData传递给同样采用泛型类型的函数时,会出现另一个错误Generics 如何将泛型数据传递给采用泛型类型的函数,generics,kotlin,Generics,Kotlin,有一个问题解决了吗 将此remoteData传递给同样采用泛型类型的函数时,会出现另一个错误 handler.onRemoteDataReady(remoteData) //<=== got Type mismatch: inferred type is RemoteData<out Class<T>> but IRemoteData<T>? was expected handler.onRemoteDataReady(remoteData) //
handler.onRemoteDataReady(remoteData)
//<=== got Type mismatch: inferred type is RemoteData<out Class<T>> but IRemoteData<T>? was expected
handler.onRemoteDataReady(remoteData)
// 如注释中所述,接口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()
}
}
接口IHandler{
远程数据就绪(数据:T?)
}
类ResponseHandler(val动作:动作):BaseHandler(动作),IHandler{
覆盖onRemoteDataReady(数据:IRemoteData?){
val responseReceived=data?.getJsonPOJO()
}
}
它的用法是:
val remoteData = RemoteData(response, POJOClazz::class.java)
val handler = ResponseHandler<POJOClazz::class.java>(action)
handler.onRemoteDataReady(remoteData)
val remoteData=remoteData(响应,POJOClazz::class.java)
val处理程序=响应处理程序(操作)
handler.onRemoteDataReady(remoteData)
请记住,从上一个答案中,您的界面IRemoteData
需要一个类型。因此,在声明ResponseHandler
类时,还需要指定类型。ResponseHandler
将实现IRemoteData
是否在与RemoteData相同的范围内定义了RemoteDataReady?否,但在另一个界面中,我更新了问题handler
是如何定义的?@MichaelButscher我更新了问题,谢谢!实际上,class ResponseHandler(val action:action):BaseHandler(action),IHandler
应该已经无法编译了,因为IRemoteData缺少类型参数
谢谢,但是您的更改仍然得到:“类型不匹配:推断的类型是RemoteData,但应为IRemoteData”,我猜实例化的val remoteData=remoteData(response,POJOClazz::class.java)不被认为是必需的IRemoteData类型
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()
.......
}
}
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)