发布时间:2026/8/27 12:17:36
预测一下Kotlin未来可能引入的新功能 前言Kotlin 是一门开放的语言不仅仅是源码的开放任意使用者都可以直接参与它的建设。大家可以通过 YouTrack 向社区提出自己的 idea 和 issue 其中一些呼声高的 issue 会进入 KEEP 交由 Kotlin 团队管理维护并有可能被最终实现、出现在未来的某个版本中。YouTrack Hot Issues本文将透过 YouTrack 中当前最热门的 issue 大胆预测一下 Kotlin 未来可能引入的新功能命名空间多接受者扩展函数集合字面值双类型属性名字解构异常多重捕获包级访问如果你喜欢这些功能可以去 YouTrack 为它们点赞投票。命名空间 Namespaceyoutrack.jetbrains.com/issue/KT-11…Java 可以通过类名调用 Class 的静态方法或者静态变量这无形中提供了一种 namespace 机制方便快速索引某个常量或方法。 Kotlin 虽然鼓励开发者使用顶级方法替代Util类但当这样的顶级方法太多时我们也希望有类似的 namespace 机制出现。目前常见的 workaround 是使用 object 类替代静态方法例如object DisplayUtil{ fun dip2px(context:Context, px:Float) { ... } }Kotlin 标准库的Delegates.notNull、协程库的Dispatchers.Default等都是这样定义的这种方式缺点是需要额外创建一个 object 对象增加内存开销。也许未来你将看到一种 namespace 关键字像下面这样使用namespace DiplayUtil { fun dip2px(context:Context, px:Float) }namespace 可以避免实例对象的创建将在字节码阶段编译成 jvm 静态方法。多接受者扩展函数 Multiple receiversyoutrack.jetbrains.com/issue/KT-10…有时我们会在 Class 内定义扩展方法class View { val Float.dp // Float is an extension receiver for dp property get() this * resources.displayMetrics.density // this refers to Float // resources, or thisView.resources, is a property in View }这种扩展方法可以在 View 的内部使用或者在外部借助with使用。with (view) { 42f.dp }但实际情况是我们无法为像 View 这样的三方库中的类定义扩展方法所以我们希望有一种能够定义多 receiver 的扩展方法的机制。未来有可能会引入context关键字通过context可以定义两个甚至多个 receiver 的扩展方法context(View) val Float.dp get() this * resources.displayMetrics.density上述代码等价于context(View) fun dp(view: View, float: Float) { float * view.resources.displayMetrics.density }顺便提一下我更喜欢其中另一种建议的语法fun (View, Float).dp() thisFloat * thisView.resources.displayMetrics.density虽然由于不符合 Kotlin 的语法习惯已经被否掉了。。集合字面值Collection literalsyoutrack.jetbrains.com/issue/KT-43…很多现代语言PythonJSGo 等等都支持使用字面值定义集合例如在 Python 中我们可以这样定义一个集合:new_array [a, b, c]字面值的定义方式更加直观简洁这在重数据操作的语言中显得非常重要。但 Kotlin 目前只能使用listOfmapOfsetOfintArrayOf等 builder 方法进行定义需要开发者记忆多个方法名而且varags也存在一些使用上的隐患。未来也许我们可以在 Kotlin 引入字面值定义val list [1, 2, 3] // has type of ListInt val map [one: 1, two: 2, three: 3] // has type of MapString, Int以上字面值默认创建 Immutable 的 List 和 Map 类型集合当然我们也可以在定义的同时明确指定集合类型val set: SetInt [1, 2, 3] // creates a SetInt val map: MutableMapString, Int [one: 1, two: 2, three: 3] // creates a MutableMap数组可以使用下面方式创建且可以实现类型推到无需指定泛型val array Array [1, 2, 3] // creates ArrayInt, note that Int was inferred here字面值的使用场景不止局限于集合甚至可以在 data class 等一些“类集合”场景中使用data class Point(val x: Int, val y: Int) fun drawLine(from: Point, to: Point) // Normal Calling drawLine(Point(1, 2), Point(3, 4)) // Calling with Collection literals drawLine([1, 2], [3, 4])双类型属性 publicprivate property typeyoutrack.jetbrains.com/issue/KT-14…我们经常有这种需求一个类的属性对内使用 Mutable 类型方便使用而对外只想暴露 Immutable 类型避免随意修改提高安全性。此时通常需要我们分别定义两个成员//List private val _items mutableListOfItem() val item : ListItem _items //LiveData private val _list MutableLiveDataListNews() val list : LiveDataListNews get() _items由于上述写法冗余有人为了图方便可能直接对外暴露 Mutable 类型容易造成隐患。未来 Kotlin 或许会引入下面的语法属性在定义时对外只暴露其 Immutable 的抽象类型保证安全性的同时减少模板代码private val items mutableListOfItem() public get(): ListItem名字解构Name based destructuringyoutrack.jetbrains.com/issue/KT-19…我们在访问 data class 或者 Pair、 Triple 等类型时经常会使用解构语法data class Address( val street: String, val city: String ) val (myStreet, myCity) myAddress目前 Kotlin 使用的基于位置的解构这存在一定隐患。 比如上述代码如果某天我们修改了Address插入了postalCode属性data class Address( val street: String, val postalCode: String, val city: String )此时位置解构中的myCity将错误地获取postalCode的值编译器却无法及时发现问题。此外还有一个突出的问题当 data class 有更多属性时位置结构只能顺序访问、无法访问某个指定属性而跳过中间的属性。未来 Kotlin 可能会增加基于名字的解构语法val (street myStreet, city myCity) myAddress名字解构中myCity中的赋值将不会发生上述错误而且当有数量众多的属性时也可以更精准地进行赋值。异常多重捕获 Multi catch blockyoutrack.jetbrains.com/issue/KT-71…Java 支持异常多重捕获即在一个 catch 块中捕获多种异常而 Kotlin 每个 catch 只能捕获一种异常fun loadData(path: String) { try { findDataLoader(path).loadXmlData() } catch (e: IOException) { println(Failed to load configuration from $path: ${e.message}) } catch (e: JDOMException) { println(Failed to load configuration from $path: ${e.message}) } }比如上面例子当我们加载一个 xml 并使用 jdom 对其进行解析时我们只希望捕获解析相关的错误忽略其它错误fun loadData(path: String) { try { findDataLoader(path).loadXmlData() } catch (e: IOException) { println(Failed to load configuration from $path: ${e.message}) } catch (e: JDOMException) { println(Failed to load configuration from $path: ${e.message}) } }上面这样的写法显得比较冗余即便集中到 when 语句处理也会免不了增加一些模板代码。未来 Kotlin 也许会像 Java 那样支持下面这样的写法fun loadData(path: String) { try { findDataLoader(path).loadXmlData() } catch (e: IOException | JDOMException) { println(Failed to load configuration from $path: ${e.message}) } }包级访问Package-private visibilityyoutrack.jetbrains.com/issue/KT-29…Java 中提供了包级访问控制权限但是 Kotlin 缺少对应的访问控制符。internal会使得整个 Module 都成为可见范围。 Kotlin 团队认为以前 Package 是划分组件的单元但如今 Module 成为了更常见的组件粒度访问权限应该围绕 Module 设计因此才没有设计包级访问权限。虽然这么说有一定道理但是很多从 Java 转到 Kotlin 的开发者仍然习惯于使用 Package 组织工程包级访问权限将有助于更好地实现代码隔离所以不少人仍然希望追加相关能力。有人建议使用下面这种语法使 class 访问权限控制在包内package com.foo import com.foo.detail.*; class Public { private val impl Detail() } // ... package com.foo.detail privatecom.foo class Detail { // ...也有人提议通过为 package 引入新的关键字让 package 内所有的 internal 降级为包内可见。但所有这些方案目前还存在争议具体方案目前仍然不明朗。最后上面这些 issue 虽然人气很高但目前仍处于原型设计和激烈讨论中未来能否真的出现以及出现时是否还是这个样子都存在不确定性不过这也正是 Kotlin 的魅力所有讨论的过程你都一目了然甚至参与其中发表你自己的观点和意见。为了让大家更快了解和上手 Kotlin特地分享这份谷歌开源的《史上最详Android版kotlin协程入门进阶实战指南》希望可以帮助大家用最短时间学习 Kotlin携程。教程通俗易懂实例丰富既有基础知识也有进阶技能能够帮助读者快速入门进阶是你学习Kotlin的葵花宝典快收藏起来第一章 Kotlin协程的基础介绍1.1 协程是什么1.2 什么是Job 、Deferred 、协程作用域1.3 Kotlin协程的基础用法第二章 kotlin协程的关键知识点初步讲解2.1 协程调度器2.2 协程上下文2.3 协程启动模式2.4 协程作用域2.5 挂起函数第三章 kotlin协程的异常处理3.1 协程异常的产生流程3.2 协程的异常处理第四章 kotlin协程在Android中的基础应用4.1 Android使用kotlin协程4.2 在Activity与Framgent中使用协程4.3 ViewModel中使用协程4.4 其他环境下使用协程第五章 kotlin协程的网络请求封装5.1 协程的常用环境5.2 协程在网络请求下的封装及使用5.3 高阶函数方式5.4 多状态函数返回值方式5.5 直接返回值的方式第六章 深入kotlin协程原理一6.1 suspend的花花肠子6.2 藏在身后的-Continuation6.3 村里的希望-SuspendLambda第七章 深入kotlin协程原理二7.1 协程的那些小秘密7.2 协程的创建过程7.3 协程的挂起与恢复7.4 协程的执行与状态机第八章 Kotlin Jetpack 实战8.1 从一个膜拜大神的 Demo 开始8.2 Kotlin 写 Gradle 脚本是一种什么体验8.3 Kotlin 编程的三重境界8.4 Kotlin 高阶函数8.5 Kotlin 泛型8.6 Kotlin 扩展8.7 Kotlin 委托8.8 协程“不为人知”的调试技巧8.9 图解协程原理第九章 Kotlin 协程 Retrofit MVVM优雅的实现网络请求9.1 项目配置9.2 实现思路9.3 协程实现9.4 协程 ViewModel LiveData实现9.5 后续优化9.6 异常处理朋友们如果需要这份完整版的《史上最详Android版kotlin协程入门进阶实战指南》微信扫描下方二维码【免费获取】。

相关新闻

2026/8/27 12:12:35

中小企业销售线索总在流失?3个管理漏洞和一套400+CRM解法

中小企业销售线索总在流失?3个管理漏洞和一套400CRM解法 很多中小企业老板都有同一个困惑:广告费花了、400电话也装了,可真正成交的客户却没见多。问题往往不在获客,而在 线索管理——从客户第一次打电话进来,到最终成…

2026/8/27 12:12:35

AI+月尘:月球原位建造的智能感知与路径规划闭环

在月球上建造永久基地,最现实的问题不是火箭运力,而是如何利用月球表面的材料。月尘,或者说月壤,是月球表面随处可得的建材原料;但月壤的成分、颗粒形态和重力环境都和地球完全不同,直接把它当沙土用会出问…

2026/8/27 13:02:40

鸿蒙崛起,高校加入培养大军

前言 近日,华为消费者业务CEO余承东宣布,明年华为将推出鸿蒙原生应用与原生体验的产品,标志着鸿蒙生态正式迈入发展的快车道。与此同时,国内主流的App已经开始着手研发纯鸿蒙系统版本,高校也积极参与,加入…

2026/8/27 13:02:40

鸿蒙开发入门:资源分类与访问

资源分类与访问 应用开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些资源在不同…

2026/8/27 13:02:40

鸿蒙开发入门:初识ArkTS语言(基础语法)

初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,建议开发者具备TS语…

2026/8/27 12:57:40

计算机单片机毕设实战-基于 STM32 单片机空气质量监测声光报警装置开发 基于 STM32 的多传感器环境监测阈值调控系统设计(010305)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/27 10:58:22

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/27 7:46:21

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/27 0:01:16

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:01:16

LeetCode Hot100(51-60)算法精解与面试技巧

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

2026/8/27 0:01:16

CRC校验实战:从模2除法到HJ212协议排错

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…