Generics kotlin,如何返回泛型类型成员变量

Generics kotlin,如何返回泛型类型成员变量,generics,kotlin,Generics,Kotlin,返回泛型类型的成员变量时出错(在Android上,不确定是否有任何区别) 任何建议都将不胜感激 试图返回传入的T,但仍会出现相同的错误: class RemoteData<T>(response: Response<ResponseBody>, pojoClassType: Class<T>, testData: T) : IRemoteData { ...... private var mData: T? = testData ......

返回泛型类型的成员变量时出错(在Android上,不确定是否有任何区别)

任何建议都将不胜感激

试图返回传入的T,但仍会出现相同的错误:

class RemoteData<T>(response: Response<ResponseBody>, pojoClassType: Class<T>, testData: T) : IRemoteData {
......
    private var mData: T? = testData
......
    override fun <T> getJsonPOJO(): T? {
        return mData  //<=== same compiler error
    }
}
class RemoteData(响应:响应,pojoClassType:class,testData:T):IRemoteData{
......
私有变量mData:T?=testData
......
重写fun getJsonPOJO():T{

return mData/以下是您要查找的内容:

interface IRemoteData<T> {
    fun isSuccess() : Boolean
    fun getJsonPOJO() : T?
    fun getCode() : Int
    fun getMessage() : String
}


class RemoteData<T>(response: Response<ResponseBody>, pojoClassType: Class<T>) : IRemoteData<T> {

    private var mData: T? = null
    override fun getJsonPOJO(): T? {
        return mData
    }

}

就这样!

以下是您想要的:

interface IRemoteData<T> {
    fun isSuccess() : Boolean
    fun getJsonPOJO() : T?
    fun getCode() : Int
    fun getMessage() : String
}


class RemoteData<T>(response: Response<ResponseBody>, pojoClassType: Class<T>) : IRemoteData<T> {

    private var mData: T? = null
    override fun getJsonPOJO(): T? {
        return mData
    }

}

就是这样!

您希望创建一个具有一个类型参数的类,该类使用一个类型参数扩展接口。首先,将泛型类型添加到接口签名中

interface IRemoteData<T>
但是,您需要的是将提供给RemoteData的泛型类型直接传递给IRemoteData

class RemoteData<E> : IRemoteData<E>

您希望创建一个具有一个类型参数的类,该类使用一个类型参数扩展接口。首先,将泛型类型添加到接口签名中

interface IRemoteData<T>
但是,您需要的是将提供给RemoteData的泛型类型直接传递给IRemoteData

class RemoteData<E> : IRemoteData<E>

从类RemoteData(错误:unrevled T)或fun getJsonPOJO()中删除前导的
。(相同的旧错误),它仍然存在编译器错误。类中的声明与方法中的声明不同。例如,class!=方法As@nicholas.hauschild说,您需要将
T
绑定到接口和类声明:
interface IRemoteData{…}
然后
class RemoteData…:IRemoteData{…}
@nicholas.hauschild,你能解释一下为什么相同的T不相同吗?它传入了“testData:T”并返回“testData”仍然会出错。谢谢!删除前导
。从类RemoteData中删除前导后(错误:unseovled T)或fun getJsonPOJO()(相同的旧错误),它仍然存在编译器错误。类中的声明与方法中的声明不同。例如,class!=方法As@nicholas.hauschild说,您需要将
T
绑定到接口和类声明:
interface IRemoteData{…}
然后
class RemoteData…:IRemoteData{…}
@nicholas.hauschild,你能解释一下为什么相同的T不相同吗?它传入了“testData:T”并返回“testData”仍然会出错。谢谢!谢谢大家,需要删除getJsonPOJO()的前导。现在另一个错误:val remoteData=remoteData(response,POJOClazz::class.java)onRemoteDataReady(remoteData)//很高兴听到这个消息,解决了您的问题。但是我不确定我是否理解您的第二个问题。您是否有更多的代码要共享,可能是一个粘贴库?因为从这里,我不知道您在哪里定义了
onRemoteDataReady()
也不知道在何处/如何调用它谢谢你们,需要从getJsonPOJO()中删除前导。现在另一个错误:val remoteData=remoteData(response,POJOClazz::class.java)onRemoteDataReady(remoteData)//很高兴听到这个消息解决了您的问题。但是我不确定我是否理解您的第二个问题。您是否有更多的代码要共享,可能是一个pastebin?因为从这里,我不知道您在哪里定义了
onRemoteDataReady()
,也不知道您在哪里/如何调用它
class RemoteData : IRemoteData<Int>
class RemoteData<E> : IRemoteData<E>
interface IRemoteData<T> {
    fun getJsonPojo(): T
}

class RemoteData<E> : IRemoteData<E> {

    override fun getJsonPojo(): E {
        // return something type E
    }
}

// elsewhere
val data = RemoteData<Int>()
val x: Int = data.getJsonPojo()