当前位置: 首页 > news >正文

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

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

sealed class ControlParams

data 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 ControlParams

data 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"))
    )
}

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

相关文章:

  • HackMyVM-Hotel
  • springboot返回所有接口详细信息
  • 2.Spring-注解开发定义bean/纯注解开发/Spring整合MyBatis(p21-p30)
  • 【动手学深度学习】现代卷积神经网络:ALexNet
  • vue实现目录锚点且滚动到指定区域时锚点自动回显——双向锚点
  • [特殊字符] 企业级Docker私有仓库实战:3步搭建Harbor安全仓库,镜像管理从此高效无忧
  • 【Vue 3 + Element Plus 实现产品标签的动态添加、删除与回显】
  • 【AI提示词】竞品分析专家
  • 解决IDEA中自动生成返回值带final修饰的问题
  • 揭秘大数据 | 19、软件定义的世界
  • 基于 C语言 的信号量实现与应用
  • C# 状态模式深度解析:构建灵活的状态驱动系统
  • linux中CosyVoice声音克隆安装教程——TTS文本转语音(数字人组件)
  • React首页加载速度优化
  • Android PowerManager功能接口详解
  • Linux 字符串截取#与%
  • xtrabackup备份
  • SpringQuartz集群支持:JDBC存储与分布式执行
  • Blender 转 STL 文件全攻略:从基础到进阶
  • 大语言模型:在共识与创造之间的技术困局与破局探索
  • wordpress 多站点设置/360搜索推广官网
  • 重庆十大装饰公司排名/北京seo公司工作
  • 怎样在网站做视频链接/网上在线看视频为什么卡
  • 中国空间站图片/seo技术顾问阿亮
  • 石家庄市新华区建设局网站/百度关键词搜索量查询
  • wordpress的插件名/旺道seo营销软件