我正在使用密封类从网络返回数据。但是当我构建项目时,我收到以下错误
类型推断失败:没有足够的信息来推断参数 T in fun error(errorMessage: String, error: Throwable): State 请明确指定。
我在这里缺少什么?
这是代码
suspend fun getdataFromApi(context: Context?, token: String?): State<ScheduleReminderListResponse> =
withContext(schedulerProvider.io)
{
try {
val list = network.getScheduleReminderList(token).await()
schedeleReminderListLocalDao.insertAll(list)
return@withContext State.success(list)
} catch (e: Exception) {
return@withContext State.error( e.message ?: "Unknown Error", e )
}
}
sealed class State<T> {
class Loading<T>: State<T>()
data class Error<T>(val errorMessage: String?, val error: Throwable): State<T>()
data class Success<T>(var data: T) : State<T>()
companion object {
fun <T> loading(): State<T> =
Loading()
fun <T> error(errorMessage: String, error: Throwable): State<T> =
Error(errorMessage, error)
fun <T> success(data: T): State<T> =
Success(data)
}
}
Run Code Online (Sandbox Code Playgroud)
在这一行中State.error( e.message ?: "Unknown Error", e ),编译器不知道T应该是什么。如果将它与 进行比较success,您将看到您明确提供了一个参数,T编译器使用该参数来推断类型。您可以在调用错误时像这样指定它:
State.error<TYPE_OF_SCHEDULE_REMINDER_LIST>( e.message ?: "Unknown Error", e )
Run Code Online (Sandbox Code Playgroud)
由于您没有使用Tin Error,您可能需要考虑将其从密封类中完全删除,并仅在有意义的地方使用它。
sealed class State {
object Loading : State()
data class Error(val errorMessage: String?, val error: Throwable) : State()
data class Success<T>(var data: T) : State()
companion object {
fun loading(): State = Loading
fun error(errorMessage: String, error: Throwable): Error =
Error(errorMessage, error)
fun <T> success(data: T): Success<T> = Success(data)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8012 次 |
| 最近记录: |