kotlin基礎【2】

變量類型

varval 的核心區別:

關鍵字

含義

能否重新賦值

類似概念(Java)

var

variable(可變變量)

可以

普通變量(無 final

val

value(不可變變量)

不可以

final 修飾的變量

var聲明的變量可以被修改

var age = 20
age = 21  // 合法,允許重新賦值

val 聲明的變量不能修改:

val name = "Kotlin"
name = "Java"  // 編譯報錯!不允許重新賦值
  • val 聲明的變量雖然不能重新賦值,但如果它是對象(如集合、類實例),對象內部的屬性是可以修改的:

    val list = mutableListOf(1, 2, 3)
    list.add(4)  // 合法,修改的是對象內部數據,不是重新賦值變量
    // list = mutableListOf(5,6)  // 編譯報錯,不允許重新賦值變量本身

    Set?

    定義了一個私有不可變接受Int類型的Set對象ACTION_IDS_DEFAULT,setOf(...)是Kotlin 的集合創建函數,用于初始化一個不可變集合,括號中是具體的事件 ID(通常來自枚舉的 id 屬性)。

    private val ACTION_IDS_DEFAULT: Set<Int> = setOf(ActionTypeEnum.ACTION_START_CONNECTION.actionId,ActionTypeEnum.ACTION_STOP_SERVICE.actionId,ActionTypeEnum.ACTION_REFRESH_DATA.actionId,ActionTypeEnum.ACTION_CLEAR_CACHE.actionId,ActionTypeEnum.ACTION_UPDATE_SETTINGS.actionId,ActionTypeEnum.ACTION_SAVE_CONFIG.actionId,ActionTypeEnum.ACTION_RESET_DEVICE.actionId,ActionTypeEnum.ACTION_SYNC_STATUS.actionId
    )

    如何定義一個java的枚舉類型:

    public enum EventIdEnum {// 事件類型枚舉值,包含事件ID和事件描述兩個成員變量EVENT_UPDATE_CONNECT_STATUS(1001, "連接狀態更新事件"),EVENT_UPDATE_DEVICE_INFO(1002, "設備信息更新事件"),EVENT_UPDATE_SUPPORT_DESKTOP(1003, "桌面支持狀態更新事件"),EVENT_UPDATE_HISTORY_DEVICE(1004, "歷史設備列表更新事件"),EVENT_UPDATE_APP_LIST(1005, "應用列表更新事件"),EVENT_UPDATE_APP_INFO_CHANGED(1006, "應用信息變更事件"),EVENT_UPDATE_LINK_APP_SHOW_ALL_MENU(1007, "鏈接應用菜單顯示事件"),EVENT_UPDATE_MEDIA_POSITION(1008, "媒體播放位置更新事件"),EVENT_UPDATE_MEDIA_STATUS(1009, "媒體播放狀態更新事件"),EVENT_UPDATE_MEDIA_MODE(1010, "媒體模式更新事件"),EVENT_UPDATE_MEDIA_META_DATA(1011, "媒體元數據更新事件");// 事件ID字段private final int eventId;// 事件描述字段private final String description;// 包含兩個參數的構造函數EventIdEnum(int eventId, String description) {this.eventId = eventId;this.description = description;}// 獲取事件ID的方法public int getEventId() {return eventId;}// 獲取事件描述的方法public String getDescription() {return description;}
    }

    構成一個java枚舉類型的部分:
    成員變量,實現的類型,構造函數,get方法

    單例對象:

    kt可以使用object關鍵字直接定義一個單例對象,在別的函數中可以直接使用類名來獲得這個對象,不需要定義getInstance函數來獲取這個對象

    // 使用 object 關鍵字創建單例
    object AppConfig {// 單例中的成員變量var apiBaseUrl: String = "https://api.example.com"var timeout: Int = 30000 // 30秒// 單例中的方法fun init(baseUrl: String, timeout: Int) {this.apiBaseUrl = baseUrlthis.timeout = timeout}fun getFullUrl(endpoint: String): String {return "$apiBaseUrl/$endpoint"}
    }

    方法的重寫

    使用override關鍵字

    override fun onReceivedPublishedData(packageName: String?, eventIdentifier: Int, dataBytes: ByteArray?
    ) {// 重寫的方法實現邏輯// 可以調用父類實現(如果需要)
    }

    可以看出方法接受一個可以為空的String類型的packageName,Int 類型的eventIdentifier,可以為空的Byte類型數組(在上一節提過)

    ByteArray?是一個字節數組類型,用于存儲原始的字節數據。它與 Java 中的 byte[] 是兼容的(可以直接互操作),常用于處理二進制數據,比如網絡傳輸、文件讀寫、加密解密等場景。

    日志打印

     Logger.warning(TAG, "Data is null!")

    同java相似不贅述

    主線操作

    ThreadUtils.runOnMainThread { ... }:這是一個工具類方法,用于將代碼塊切換到主線程執行。

    // 將 eventId 替換為 currentEvent,類型仍為 EventIdEnum
    when (currentEvent) {EventIdEnum.EVENT_UPDATE_CONNECT_STATUS -> ThreadUtils.runOnMainThread {onConnectionStatusChanged(packageName, dataJson)}EventIdEnum.EVENT_UPDATE_DEVICE_INFO -> ThreadUtils.runOnMainThread {onDeviceInfoUpdated(packageName, dataJson)}EventIdEnum.EVENT_UPDATE_SUPPORT_DESKTOP -> ThreadUtils.runOnMainThread {onDesktopSupportChanged(packageName, dataJson)}EventIdEnum.EVENT_UPDATE_HISTORY_DEVICE -> ThreadUtils.runOnMainThread {onHistoryDeviceListUpdated(packageName, dataJson)}EventIdEnum.EVENT_UPDATE_APP_LIST -> ThreadUtils.runOnMainThread {onAppListUpdated(packageName, dataJson)}
    }

    什么操作需要放在主線程?

    涉及到更新UI頁面的操作,這些調用的函數會引起UI界面的改變,所以需要放在主線程

    其他長時間且不直接涉及UI界面改變的可以放在子線程

    when語句

    when (it.dataCategory) {CategoryTypeConfig.TYPE_FIRST_SYSTEM -> {DataSourceConstants.SOURCE_PRIMARY_SYSTEM}CategoryTypeConfig.TYPE_SECONDARY_TOOL -> {DataSourceConstants.SOURCE_AUXILIARY_TOOL}CategoryTypeConfig.TYPE_THIRD_PARTY -> {DataSourceConstants.SOURCE_EXTERNAL_MODULE}else -> {DataSourceConstants.SOURCE_EXTERNAL_MODULE}
    }

    when語句這一段實際上返回的是一個變量,所以when語句可以這么寫

    var data = when (it.dataCategory) {CategoryTypeConfig.TYPE_FIRST_SYSTEM -> {DataSourceConstants.SOURCE_PRIMARY_SYSTEM}CategoryTypeConfig.TYPE_SECONDARY_TOOL -> {DataSourceConstants.SOURCE_AUXILIARY_TOOL}CategoryTypeConfig.TYPE_THIRD_PARTY -> {DataSourceConstants.SOURCE_EXTERNAL_MODULE}else -> {DataSourceConstants.SOURCE_EXTERNAL_MODULE}
    }

    也可以把它作為一個參數傳給一個函數

    callback.onProgress(when (it.itemType) {ItemTypeConfig.TYPE_STANDARD -> {ResourceType.SOURCE_STANDARD}ItemTypeConfig.TYPE_ENHANCED -> {ResourceType.SOURCE_ENHANCED}ItemTypeConfig.TYPE_PREMIUM -> {ResourceType.SOURCE_PREMIUM}else -> {ResourceType.SOURCE_PREMIUM}}, 100
    );

    lambda表達式放在下一章

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

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

    相關文章

    【Spring AI】阿里云DashScope靈積模型

    DashScope&#xff08;靈積模型&#xff09;是阿里云提供的大模型服務平臺&#xff0c;集成了阿里自研的 通義千問&#xff08;Qwen&#xff09;系列大語言模型&#xff08;LLM&#xff09;以及多模態模型&#xff0c;為企業與開發者提供開箱即用的 AI 能力。官網地址 https://…

    Rust Web框架性能對比與實戰指南

    Rust Actix Web Rust Web 框架的實用對比分析 以下是 Rust Web 框架的實用對比分析,涵蓋主要框架(如 Actix-web、Rocket、Warp、Axum 等)的常見使用場景示例,按功能分類整理: 基礎路由設置 Actix-web use actix_web::{get, App, HttpResponse, HttpServer, Responder}…

    【解決vmware ubuntu不小心刪boot分區,進不去系統】

    如果仍然提示 Unable to locate package testdisk&#xff0c;有可能是源中不包含該工具&#xff08;LiveCD 使用的是“最小環境”&#xff09;。 &#x1fa9b; 解決方法&#xff1a;切換到國內完整軟件源&#xff08;推薦&#xff09; 編輯 sources.list&#xff1a; sudo na…

    04-netty基礎-Reactor三種模型

    1 基本概念Reactor模型是一種事件驅動&#xff08;Event-Driven&#xff09;的設計模式&#xff0c;主要用于高效處理高并發、I/O密集型場景&#xff08;如網絡、服務器、分布式等&#xff09;。其核心思想就是集中管理事件&#xff0c;將I/O操作與業務邏輯解耦&#xff0c;避免…

    踩坑無數!NFS服務從入門到放棄再到真香的血淚史

    前言 說起NFS&#xff0c;我估計很多搞運維的兄弟都有一肚子話要說。這玩意兒吧&#xff0c;看起來簡單&#xff0c;用起來坑多&#xff0c;但是真正搞明白了又覺得挺香的。 前幾天有個朋友問我&#xff0c;說他們公司要搭建一個文件共享系統&#xff0c;問我推薦什么方案。我…

    矩陣譜分解的證明及計算示例

    1. 矩陣譜分解的條件矩陣的譜分解&#xff08;也稱為特征分解&#xff09;是將一個矩陣分解為一系列由其特征向量和特征值構成的矩陣乘積的過程。進行譜分解的前提條件包括&#xff1a;<1.> 矩陣是可對角化的&#xff08;Diagonalizable&#xff09;&#xff0c;即矩陣存…

    Leetcode 07 java

    169. 多數元素 給定一個大小為 n 的數組 nums &#xff0c;返回其中的多數元素。 多數元素是指在數組中出現次數 大于 ? n/2 ? 的元素。 你可以假設數組是非空的&#xff0c;并且給定的數組總是存在多數元素。 示例 1&#xff1a; 輸入&#xff1a;nums [3,2,3] 輸出&a…

    CS231n-2017 Lecture6訓練神經網絡(一)筆記

    本節主要講的是模型訓練時的算法設計數據預處理&#xff1a;關于數據預處理&#xff0c;我們有常用的3個符號&#xff0c;數據矩陣X&#xff0c;假設其尺寸是&#xff0c;N是數據樣本的數量&#xff0c;D是數據的維度均值減法(Mean subtraction)&#xff1a;是預處理最常用的形…

    C++ 中實現 `Task::WhenAll` 和 `Task::WhenAny` 的兩種方案

    &#x1f4da; C 中實現 Task::WhenAll 和 Task::WhenAny 的兩種方案 引用&#xff1a; 拈朵微笑的花 想一番人世變換 到頭來輸贏又何妨日與夜互消長 富與貴難久長 今早的容顏老於昨晚C 標準庫異步編程示例&#xff08;一&#xff09;C TAP&#xff08;基于任務的異步編程…

    【學習】Codeforces Global Round 15 C. Maximize the Intersections

    題意&#xff1a;給出一個圓&#xff0c;順時針排布1~2*n&#xff0c;已知連了k條邊&#xff0c;問這個圓最好情況下有多少個線的交點&#xff0c;要求線與線之間不能有重復的連接點&#xff0c;也就是每個點只能被一條線連接 思路&#xff1a; 1.考慮沒有線的時候&#xff0…

    圖論:Dijkstra算法

    昨天介紹了最小生成樹的兩個算法&#xff0c;最小生成樹的兩個算法旨在求解無向有權圖中的最小代價聯通圖的問題&#xff0c;那么對于有向有權圖&#xff0c;從起點到終點的最小花費代價問題就可以用 Dijkstra 算法來解決而且Dijkstra算法可以求出來從起始點開始到所有節點的最…

    WPFC#超市管理系統(2)顧客管理、供應商管理、用戶管理

    超市管理系統3. 顧客管理3.1 顧客新增3.2 DataGrid樣式3.3 顧客刪除3.4 顧客修改4. 供應商管理4.1 供應商管理主界面4.2 新增供應商4.3 修改供應商5. 用戶管理5.1 用戶管理主界面5.2 新增用戶5.3 修改用戶總結3. 顧客管理 在CustomerView.xaml使用命令綁定方式添加頁面加載Loa…

    Windows本地部署DeepSeek

    1、Ollama1、下載Ollama安裝包https://ollama.com/download&#xff08;如果下載很慢 可以直接找我拿安裝包&#xff09;2、使用命令行安裝打開cmd 將下載的安裝包OllamaSetup.exe 放到想要安裝的目錄下。&#xff08;如果直接雙擊&#xff0c;會裝到C盤&#xff09;例如想裝到…

    基于Python的新聞爬蟲:實時追蹤行業動態

    引言 在信息時代&#xff0c;行業動態瞬息萬變。金融從業者需要實時了解政策變化&#xff0c;科技公司需要跟蹤技術趨勢&#xff0c;市場營銷人員需要掌握競品動向。傳統的人工信息收集方式效率低下&#xff0c;難以滿足實時性需求。Python爬蟲技術為解決這一問題提供了高效方…

    阿里視頻直播解決方案VS(MediaMTX + WebRTC) 流媒體解決方案

    背景&#xff1a; 公司采購了新的攝像頭&#xff0c;通過rtsp或者rtmp推流到云平臺&#xff0c;云平臺內部進行轉碼處理&#xff0c;客戶端使用HLS或HTTP-FLV播放&#xff0c;移動App可能使用HLS或私有SDK&#xff0c;超低延時則采用WebRTC。 技術選型&#xff1a; RTSP&…

    day33:零基礎學嵌入式之網絡——TCP并發服務器

    一、服務器1.服務器分類單循環服務器&#xff1a;只能處理一個客戶端任務的服務器并發服務器&#xff1a;可同時處理多個客戶端任務的服務器二、TCP并發服務器的構建1.如何構建&#xff1f;&#xff08;1&#xff09;多進程&#xff08;每一次創建都非常耗時耗空間&#xff0c;…

    VR全景制作的流程?VR全景制作可以用在哪些領域?

    VR全景制作的流程&#xff1f;VR全景制作可以用在哪些領域&#xff1f;VR全景制作&#xff1a;流程、應用與未來虛擬現實&#xff08;VR&#xff09;全景制作正迅速改變我們的感官體驗&#xff0c;使我們能夠身臨其境地探索虛擬世界&#xff0c;享受沉浸式的奇妙感受。那么&…

    用LangChain重構客服系統:騰訊云向量數據庫+GPT-4o實戰

    人們眼中的天才之所以卓越非凡&#xff0c;并非天資超人一等而是付出了持續不斷的努力。1萬小時的錘煉是任何人從平凡變成超凡的必要條件。———— 馬爾科姆格拉德威爾 目錄 一、傳統客服系統痛點與重構價值 1.1 傳統方案瓶頸分析 1.2 新方案技術突破點 二、系統架構設計&…

    主要分布在腹側海馬體(vHPC)CA1區域(vCA1)的混合調諧細胞(mixed-tuning cells)對NLP中的深層語義分析的積極影響和啟示

    腹側海馬體CA1區&#xff08;vCA1&#xff09;的混合調諧細胞&#xff08;mixed-tuning cells&#xff09;通過整合情感、社會關系、空間概念等多模態信息&#xff0c;形成動態的情景化語義表征&#xff0c;為自然語言處理&#xff08;NLP&#xff09;的深層語義分析提供了重要…

    ESP32的ADF詳解:6. Audio Processing的API

    一、Downmix 1. 核心功能 將基礎音頻流和新加入音頻流混合為單一輸出流&#xff0c;支持動態增益控制和狀態轉換。輸出聲道數與基礎音頻一致&#xff0c;新加入音頻自動轉換聲道匹配。2. 關鍵特性聲道處理 輸出聲道數 基礎音頻聲道數新加入音頻自動轉換聲道&#xff08;如立體…