Kotlin 函数 return 具有来自两种不同数据类型的任何一种 return 类型,而没有将 Any 指定为 return 类型?
Kotlin function return with any one return type from two different data type without specifying Any as a return type?
我想允许这两种 return 类型中的任何一种 (ApiResponse || ErrorResponse)。但是 Return Type 不应该是对象或 Any。
fun getAllUser() : Any? {
val flag = true
return if(flag){
ApiResponse(true)
} else {
ErrorResponse(500)
}
}
使用 return 类型(任何),无法编写扩展函数来使用两种不同的 return 类型执行特定操作。我要指定两个响应。
In My case, I want to write different Extension function for ApiResponse & ErrorResponse class.
Is it possible to return either ErrorResponse or ApiResponse in a same function?
我想 return 在同一函数中使用 ErrorResponse 或 ApiResponse。
通过使用 [Λrrow][1] 库,我可以实现如下功能。
fun getAllUser() : Either<ErrorResponse,ApiResponse>? {
val flag = true
ResponseEntity(ErrorResponse(500),HttpStatus.INTERNAL_SERVER_ERROR)
ResponseEntity.internalServerError().build<ErrorResponse>()
val response: Either<ErrorResponse,ApiResponse> = return if(flag){
Either.right(ApiResponse(true))
} else {
Either.left(ErrorResponse(500))
}
return response
}
我建议使用 Result
class。要么是 Kotlin 提供的,要么是您自己的实现更好。 Here 是使用自定义实现的示例之一,以及说明。这应该为您提供所需的所有信息。
创建一个您的 类 实现的密封接口:
sealed interface Response<out T>
data class ApiResponse<T>(val data: T): Response<T>
data class ErrorResponse(val errorCode: Int): Response<Nothing>
fun getAllUser() : Response<Boolean> {
val flag = true
return if(flag){
ApiResponse(true)
} else {
ErrorResponse(500)
}
}
然后您可以编写处理任一类型的扩展函数:
fun Response<Boolean>.foo() {
when (this) {
is ApiResponse<Boolean> -> { TODO() }
is ErrorResponse -> { TODO() }
}
}
在此 when 语句的分支内,输入将被智能转换为适当的类型。
我想允许这两种 return 类型中的任何一种 (ApiResponse || ErrorResponse)。但是 Return Type 不应该是对象或 Any。
fun getAllUser() : Any? {
val flag = true
return if(flag){
ApiResponse(true)
} else {
ErrorResponse(500)
}
}
使用 return 类型(任何),无法编写扩展函数来使用两种不同的 return 类型执行特定操作。我要指定两个响应。
In My case, I want to write different Extension function for ApiResponse & ErrorResponse class.
Is it possible to return either ErrorResponse or ApiResponse in a same function?
我想 return 在同一函数中使用 ErrorResponse 或 ApiResponse。
通过使用 [Λrrow][1] 库,我可以实现如下功能。
fun getAllUser() : Either<ErrorResponse,ApiResponse>? {
val flag = true
ResponseEntity(ErrorResponse(500),HttpStatus.INTERNAL_SERVER_ERROR)
ResponseEntity.internalServerError().build<ErrorResponse>()
val response: Either<ErrorResponse,ApiResponse> = return if(flag){
Either.right(ApiResponse(true))
} else {
Either.left(ErrorResponse(500))
}
return response
}
我建议使用 Result
class。要么是 Kotlin 提供的,要么是您自己的实现更好。 Here 是使用自定义实现的示例之一,以及说明。这应该为您提供所需的所有信息。
创建一个您的 类 实现的密封接口:
sealed interface Response<out T>
data class ApiResponse<T>(val data: T): Response<T>
data class ErrorResponse(val errorCode: Int): Response<Nothing>
fun getAllUser() : Response<Boolean> {
val flag = true
return if(flag){
ApiResponse(true)
} else {
ErrorResponse(500)
}
}
然后您可以编写处理任一类型的扩展函数:
fun Response<Boolean>.foo() {
when (this) {
is ApiResponse<Boolean> -> { TODO() }
is ErrorResponse -> { TODO() }
}
}
在此 when 语句的分支内,输入将被智能转换为适当的类型。