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

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;如立体…