欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Kotlin 通用请求接口设计:灵活处理多样化参数

Kotlin 通用请求接口设计:灵活处理多样化参数

2025/4/16 14:32:34 来源:https://blog.csdn.net/tangweiguo03051987/article/details/147109884  浏览:    关键词:Kotlin 通用请求接口设计:灵活处理多样化参数

在 Kotlin 中设计一个通用的 ControlParams 类来处理不同的控制参数,有几种常见的方法:方案1:使用密封类(Sealed Class)

sealed class ControlParamsdata class LightControlParams(val brightness: Int,val color: String
) : ControlParams()data class ThermostatControlParams(val temperature: Double,val mode: String
) : ControlParams()data class GenericControlParams(val parameters: Map<String, Any>
) : ControlParams()

方案2:使用泛型和类型参数

data class DeviceControlBody<T: ControlParams>(val timestamp: String,val deviceId: String,val params: T
)interface ControlParamsdata class LightParams(val on: Boolean,val brightness: Int
) : ControlParams

方案3:使用灵活的 Map 结构(最简单通用)

data class ControlParams(val params: Map<String, Any>
)// 使用示例
val controlBody = DeviceControlBody(timestamp = "2023-01-01T00:00:00",deviceId = "light-123",params = ControlParams(mapOf("brightness" to 80,"color" to "red"))
)

方案4:使用 JSON 字符串(与后端交互时常用)

data class ControlParams(val jsonParams: String
)// 使用示例
val paramsJson = """{"brightness": 80, "color": "red"}"""
val controlBody = DeviceControlBody(timestamp = "2023-01-01T00:00:00",deviceId = "light-123",params = ControlParams(paramsJson)
)

推荐方案
根据你的具体需求,我推荐以下方案:

如果参数结构明确且类型安全重要:使用密封类方案(方案1)

如果需要最大灵活性:使用 Map 结构(方案3)

如果需要与 REST API 简单交互:使用 JSON 字符串(方案4)

完整示例(推荐方案1 + 方案3结合):

// 基础控制参数接口
interface ControlParams// 特定设备参数
data class LightControlParams(val brightness: Int,val color: String
) : ControlParams// 通用参数实现
data class GenericControlParams(val parameters: Map<String, Any>
) : ControlParams// 设备控制请求体
data class DeviceControlBody(val timestamp: String,val deviceId: String,val params: ControlParams
)// 使用示例
fun main() {// 特定设备控制val lightControl = DeviceControlBody("2023-01-01T00:00:00","light-123",LightControlParams(80, "red"))// 通用设备控制val genericControl = DeviceControlBody("2023-01-01T00:00:00","device-xyz",GenericControlParams(mapOf("speed" to 5, "mode" to "auto")))
}

这种设计既保持了类型安全,又提供了足够的灵活性来处理不同的设备控制参数。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词