Generics 如何将泛型数据传递给采用泛型类型的函数

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) //

有一个问题解决了吗

将此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)