Android-泛型类作为Kotlin中用于改装调用的返回类型
我有以下方法:Android-泛型类作为Kotlin中用于改装调用的返回类型,android,kotlin,generics,retrofit2,Android,Kotlin,Generics,Retrofit2,我有以下方法: override suspend fun getData(pageNr: Int): NetworkResult { // make the request val response = getDataApi.getData(pageNr) // based on response, return either Success or Error return if(response.isSuccessful){
override suspend fun getData(pageNr: Int): NetworkResult {
// make the request
val response = getDataApi.getData(pageNr)
// based on response, return either Success or Error
return if(response.isSuccessful){
NetworkResult.Success(response.body())
} else{
NetworkResult.Error(response.code())
}
}
Android Studio抱怨返回类型。它说:
"One type argument expected for class NetworkResult<out R>"
为什么会出现这个错误Success
和Error
都是NetworkResult
的子类型,那么为什么不允许返回其中一个呢
为了完整性,我还添加了改型接口调用方法:
@GET("getData/")
suspend fun getData(@Query("page") page:Int) : Response<MyData>
@GET(“getData/”)
suspend fun getData(@Query(“page”)page:Int):响应
将通用参数添加到getData
函数的返回类型:
override suspend fun getData(pageNr: Int): NetworkResult<MyData> {
// ...
}
override suspend fun getData(pageNr:Int):NetworkResult{
// ...
}
您可以将泛型类型更改为
MyData?
,或者如果您确定response.body()
不返回null
,请添加代码>运算符:NetworkResult.Success(response.body()!!)
将通用参数添加到getData
函数的返回类型:
override suspend fun getData(pageNr: Int): NetworkResult<MyData> {
// ...
}
override suspend fun getData(pageNr:Int):NetworkResult{
// ...
}
您可以将泛型类型更改为MyData?
,或者如果您确定response.body()
不返回null
,请添加代码>运算符:NetworkResult.Success(response.body()!!)
您的NetworkResult
具有类型参数R
您需要在函数签名中指定该参数。因此,无论response.body()
具有何种类型,您都需要在getData签名中指定。response.body()的返回类型是MyData。您的NetworkResult
具有类型参数R
您需要在函数签名中指定该参数。因此,无论response.body()
具有何种类型,您都需要在getData signature.return response.body()的类型中指定它是MyData。但是else条件不返回MyData实例。相反,使用response.error()返回一个Int值没问题,它返回Nothing
,Nothing
继承其他类,包括MyData
class.android studio现在抱怨“Required:NetworkResult”和“Found:NetworkResult.Success”。整个if-else分支用红色下划线。好的,我决定使用!!并在其周围添加了一个try/catch块。但else条件不返回MyData实例。相反,使用response.error()返回一个Int值没问题,它返回Nothing
,Nothing
继承其他类,包括MyData
class.android studio现在抱怨“Required:NetworkResult”和“Found:NetworkResult.Success”。整个if-else分支用红色下划线。好的,我决定使用!!并在其周围添加了一个try/catch块。