我正在做一个应用程序,必须从多个api获得响应,它们服务于相同的工作,但它们是不同的。While on可以输出
{
"token": "AAAAABBBBB",
"expires": "unixtimestamp",
"username": "aaa",
"password": "bbb"
}
另一个可以遵循OAuth标准
{
"access_token": "AAAABBBBCCCC",
"refresh_token": "BBBBCCCCDDDD",
"expires_in": 3599
}
我已经有数据类的类型,知道什么api正在响应(所以我可以匹配数据类),我想知道是否有一个更好的替代方案,而不仅仅是一个when
表达式。
谢谢。
我不太确定你在问什么。
如果你有两个不同的返回值,表示凭证,应该在下游进行不同的处理,但你仍然想返回其中任何一个,我建议使用密封类来建模数据。
sealed class Credentials {
data class BasicAuth(...): Credentials()
data class OAuth(...): Credentials()
}
suspend fun getCredentials(): Credentials {
val json: String = doStuff() // suspending function
return serializeOAuth(json) ?: serializeBasic(json) ?: // throw or null
private fun serializeOAuth(json: String): OAuth? =
try {
Gson().fromJson(json, OAuthCredentials::class)
} catch(...) { return null }
private fun serializeBasic(json: String): BasicAuth? =
try {
Gson().fromJson(json, BasicAuth::class)
} catch(...) { return null }
}
如果这对你没有帮助,也许你可以详细说明问题是什么。