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

這種設計既保持了類型安全,又提供了足夠的靈活性來處理不同的設備控制參數。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900919.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

aspark 配置2

編寫Hadoop集群啟停腳本 1.建立新文件&#xff0c;編寫腳本程序 在hadoop101中操作&#xff0c;在/root/bin下新建文件&#xff1a;myhadoop&#xff0c;輸入如下內容&#xff1a; 2.分發執行權限 保存后退出&#xff0c;然后賦予腳本執行權限 [roothadoop101 ~]$ chmod x /r…

Webstorm 使用搜不到node_modules下的JS內容 TS項目按Ctrl無法跳轉到函數實現

將node_modules標記為不排除&#xff0c;此時要把內存改大&#xff0c;不然webstorm中途建立索引時&#xff0c;會因為內存不足&#xff0c;導致索引中途停止&#xff0c;造成后續搜索不出來 更改使用內存設置 內存調為4096 若出現搜不出來js內容時&#xff0c;請直接重啟下該項…

vue-element-plus-admin的安裝

文檔鏈接&#xff1a;開始 | vue-element-plus-admin 之前嘗試按照官方文檔來安裝&#xff0c;運行npm run dev命令卻不能正常打開訪問瀏覽器&#xff0c;換一個方式 首先在目錄下打開命令窗口 1、克隆項目 從 GitHub 獲取代碼 # clone 代碼 git clone https://github.com…

【windows10】基于SSH反向隧道公網ip端口實現遠程桌面

【windows10】基于SSH反向隧道公網ip端口實現遠程桌面 1.背景2.SSH反向隧道3.遠程連接電腦 1.背景 ?Windows 10遠程桌面協議的簡稱是RDP&#xff08;Remote Desktop Protocol&#xff09;?。 RDP是一種網絡協議&#xff0c;允許用戶遠程訪問和操作另一臺計算機。 遠程桌面功…

軟考系統架構設計師之大數據與人工智能筆記

一、大數據架構設計 1. 核心概念與挑戰 大數據特征&#xff1a;體量大&#xff08;Volume&#xff09;、多樣性&#xff08;Variety&#xff09;、高速性&#xff08;Velocity&#xff09;、價值密度低&#xff08;Value&#xff09;。傳統數據庫問題&#xff1a;數據過載、性…

【數據結構 · 初階】- 單鏈表

目錄 一.相關指針知識點 二.鏈表 1.為什么學了順序表還要學鏈表 2.優點 三.實現 1.鏈表的打印 —— 理解鏈表結構 (2) 物理結構圖 2.鏈表的尾插 —— 入門 錯誤寫法&#xff1a;tail ! NULL 總結&#xff1a; 正確代碼物理圖解&#xff1a; (2) 尾插整體代碼 (思考…

按鍵消抖(用狀態機實現)

基于狀態機的設計代碼 module key_filter(clk,rst,key,key_p_flag,key_r_flag,key_state);input clk,rst;input key;output reg key_p_flag;output reg key_r_flag;output reg key_state;reg [1:0]r_key; //后面用來判斷什么時候pedge&#xff0c;什么時候nedgealways…

大數據(7.2)Kafka萬億級數據洪流下的架構優化實戰:從參數調優到集群治理

目錄 一、海量數據場景下的性能之殤1.1 互聯網企業的數據增長曲線1.2 典型性能瓶頸分析 二、生產者端極致優化2.1 批量發送黃金法則2.1.1 分區選擇算法對比 2.2 序列化性能突破 三、消費者端并發藝術3.1 多線程消費模式演進3.1.1 消費組Rebalance優化 3.2 位移管理高階技巧 四、…

MyBatis深度解析與實戰指南:細節完整,從入門到精通

MyBatis深度解析與實戰指南&#xff1a;細節完整&#xff0c;從入門到精通 整理這份筆記&#xff0c;是因為學習 MyBatis 時發現很多教程要么只講基礎 CRUD&#xff0c;要么直接跳到 Spring 整合&#xff0c;對 MyBatis 核心特性講解不全面&#xff0c;基礎部分也不夠完整。實…

【科學技術部政務服務平臺-用戶注冊/登錄安全分析報告】

前言 由于網站注冊入口容易被黑客攻擊&#xff0c;存在如下安全問題&#xff1a; 暴力破解密碼&#xff0c;造成用戶信息泄露短信盜刷的安全問題&#xff0c;影響業務及導致用戶投訴帶來經濟損失&#xff0c;尤其是后付費客戶&#xff0c;風險巨大&#xff0c;造成虧損無底洞…

【Audio開發三】音頻audio中幀frameSize ,周期大小periodsize,緩沖區buffer原理詳解以及代碼流程分析

一、基礎概述 在分析獲取最小幀數前&#xff0c;我們先來了解幾個相關的概念。 1&#xff0c;幀 幀&#xff08;frame&#xff09;&#xff1a;表示一個完整的聲音單元&#xff0c;所謂的聲音單元是指一個采樣樣本。如果是雙聲道&#xff0c;那么一個完整的聲音單元就是 2 個樣…

K8S學習之基礎七十五:istio實現灰度發布

istio實現灰度發布 上傳鏡像到harbor 創建兩個版本的pod vi deployment-v1.yaml apiVersion: apps/v1 kind: Deployment metadata:name: appv1labels:app: v1 spec:replicas: 1selector:matchLabels:app: v1apply: canarytemplate:metadata:labels:app: v1apply: canaryspec…

C++藍橋杯填空題(攻克版)

片頭 嗨~小伙伴們&#xff0c;咱們繼續攻克填空題&#xff0c;先把5分拿到手~ 第1題 數位遞增的數 這道題&#xff0c;需要我們計算在整數 1 至 n 中有多少個數位遞增的數。 什么是數位遞增的數呢&#xff1f;一個正整數如果任何一個數位不大于右邊相鄰的數位。比如&#xf…

【Python】數據結構

【Python】數據結構&#xff1a; Series&#xff1a;1、通過列表創建Series類對象2、顯示地給數據指定標簽索引3、通過字典創建Series類對象4、獲取索引5、獲取數據 DataFrame&#xff1a;1、通過數組創建一個DataFrame類對象2、指定列索引3、指定行索引4、獲取列的數據5、查看…

Android XML布局與Compose組件對照手冊

下面我將詳細列出傳統 XML 布局中的組件與 Compose 組件的對應關系&#xff0c;幫助您更好地進行遷移或混合開發。 基礎布局對應 XML 布局Compose 組件說明LinearLayout (vertical)Column垂直排列子項LinearLayout (horizontal)Row水平排列子項FrameLayoutBox層疊子項Relativ…

云原生運維在 2025 年的發展藍圖

隨著云計算技術的不斷發展和普及&#xff0c;云原生已經成為了現代應用開發和運維的主流趨勢。云原生運維是指在云原生環境下&#xff0c;對應用進行部署、監控、管理和優化的過程。在 2025 年&#xff0c;云原生運維將迎來更加廣闊的發展前景&#xff0c;同時也將面臨著一系列…

js day5

復習模板字符串&#xff1a; 在輸出語句里面 document.write(我今年${a}歲了)中間是反引號&#xff1b;里面是${變量}&#xff1b; 復習基本類型 number String null undefined boolean 檢測數據類型輸出typedf 變量則可&#xff1b; 添加鏈接描述 復習樣式變量table什么的邊…

SmolVLM2: The Smollest Video Model Ever(三)

這是對《SmolLM2: When Smol Goes Big — Data-Centric Training of a Small Language Model》的翻譯閱讀 摘要 雖然大語言模型在人工智能的許多應用中取得了突破&#xff0c;但其固有的大規模特性使得它們在計算上成本高昂&#xff0c;并且在資源受限的環境中部署具有挑戰性。…

汽車軟件開發常用的需求管理工具匯總

目錄 往期推薦 DOORS&#xff08;IBM &#xff09; 行業應用企業&#xff1a; 應用背景&#xff1a; 主要特點&#xff1a; Polarion ALM&#xff08;Siemens&#xff09; 行業應用企業&#xff1a; 應用背景&#xff1a; 主要特點&#xff1a; Codebeamer ALM&#x…

爬蟲工程師雜活工具人

30歲的年齡;這個年齡大家都是成年人;都是做父母的年齡了;你再工位上的心態會發生很大變化的; 爬蟲工程師基本都是如此;社會最low的一幫連銷售都做不了的;單子都開不出來的然后轉行做爬蟲工程師的;這樣的人基本不太和社會接觸; 你作為爬蟲初級工程師就敲著鍵盤然后解析著html;…