返回泛型类型的成员变量时出错(在 Android 上,不确定是否有任何区别)
private var mData: T? = null
override fun <T> getJsonPOJO(): T? {
return mData
}
Type mismatch: inferred type is T#2 (type parameter of RemoteData)? but T#1 (type parameter of RemoteData.getJsonPOJO)? was expected
这是代码,该函数返回泛型类型:
interface IRemoteData {
fun isSuccess() : Boolean
fun <T> getJsonPOJO() : T?
fun getCode() : Int
fun getMessage() : String
}
class RemoteData<T>(response: Response<ResponseBody>, pojoClassType: Class<T>) : IRemoteData {
private val mIsSuccess: Boolean = response.isSuccessful
private val mCode: Int = response.code()
private val mMessage : String = response.message() ?: ""
private var mData: T? = null
init {
val jsonString: String? = response.body()?.string() ?: ""
mData = if (jsonString != null) Gson().fromJson(jsonString, pojoClassType) else null
}
override fun isSuccess(): Boolean {
return mIsSuccess
}
override fun <T> getJsonPOJO(): T? {
return mData //<=== compile error here
}
override fun getCode(): Int {
return mCode
}
override fun getMessage(): String {
return mMessage
}
}
非常感谢任何建议!
尝试返回传入的 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
}
}
这就是您要寻找的内容:
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
}
}
The T
到处都会被替换,所以想象一下如果它是String
(我发现使用泛型类型时更简单)。
你会有:
interface IRemoteData<String> {
fun getJsonPOJO(): String?
}
class RemoteData<String>(...): IRemoteData<String> {
private var mData: String? = null
override fun getJsonPOJO(): String? {
return mData
}
}
就是这样 !
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)