在 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")))
}
这种设计既保持了类型安全,又提供了足够的灵活性来处理不同的设备控制参数。