
Kotlin
文章平均质量分 76
锐湃
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Kotlin 全新特性:“上下文参数” 应用场景介绍
Kotlin 2.2.0 正式引入上下文参数(ContextParameters)作为预览特性,这是对原实验特性上下文接收器(ContextReceivers)的命名和语法改进。该特性允许函数声明多个接收器参数,提供更灵活的作用域控制。文章回顾了其发展历程,从扩展函数到多接收器概念,详细介绍了新语法规则(如强制命名参数)和8个典型应用场景,包括DSL构建、依赖注入、协程集成等。同时指出使用时应遵循命名规范、控制参数数量等最佳实践,并展望了该特性未来的发展方向。上下文参数为Kotlin代码组织提供了新的可能性转载 2025-08-11 17:22:39 · 20 阅读 · 0 评论 -
Kotlin知识体系(七) : Flow线程控制、状态管理及异常处理指南
本文介绍了Kotlin Flow的线程调度、状态管理、生命周期管理和异常处理机制。在线程调度方面,通过flowOn操作符和协程上下文实现灵活线程切换。状态管理部分对比了StateFlow(状态持有)和SharedFlow(事件广播)的特性及使用场景。生命周期管理重点讲解了repeatOnLifecycle的机制,避免UI非活跃状态下的资源浪费。异常处理章节详细解析了catch、retry、retryWhen等操作符的精准控制策略,以及onCompletion的资源清理作用。文章还提供了与Jetpack Co转载 2025-08-05 15:30:48 · 31 阅读 · 0 评论 -
Kotlin开闭原则真香警告
开闭原则(OCP)是SOLID原则之一,主张软件实体应对扩展开放、对修改关闭。文章通过形状绘制和OTP验证系统的案例对比,展示了违反OCP的代码(需频繁修改)与符合OCP的设计(通过接口扩展)的差异。Kotlin中可利用接口、扩展函数和密封类优雅实现OCP。该原则适用于需频繁扩展的支付、日志等系统,但不推荐用于稳定需求或原型阶段。OCP与其他SOLID原则相辅相成,共同构建可维护的软件架构。转载 2025-08-04 18:02:40 · 12 阅读 · 0 评论 -
nio FileChannel下载写入文件示例
nio FileChannel下载写入文件示例原创 2025-08-04 09:52:50 · 66 阅读 · 0 评论 -
获取Instant毫秒值
Java/Kotlin中Instant类的toEpochMilli()方法可将UTC时间转换为Unix纪元时间的毫秒级时间戳。该方法适用于时间比较、差值计算等场景,但需注意null检查和精度问题(会截断纳秒部分)。文章提供了获取当前时间和文件创建时间毫秒值的代码示例,并解释了毫秒时间戳的含义和使用场景。对于需要更高精度的情况,建议使用getEpochSecond()结合getNano()方法计算。转载 2025-08-02 18:43:09 · 41 阅读 · 0 评论 -
Kotlin 查文件创建日期
Kotlin中获取文件创建日期可通过Java NIO的Files和BasicFileAttributes类实现。核心步骤包括:使用Paths.get()转换路径,Files.readAttributes()读取文件属性,BasicFileAttributes.creationTime()获取创建时间,并通过DateTimeFormatter格式化输出。注意处理文件不存在、权限不足等异常情况。该方法兼容主流文件系统,但老旧系统可能不支持创建时间属性。使用时需确保文件路径有效且程序有访问权限。转载 2025-08-02 18:38:19 · 21 阅读 · 0 评论 -
当Kotlin的object不再是单例时:那些你可能不知道的陷阱
摘要:Kotlin的object关键字虽然能保证单例模式,但序列化过程可能破坏这一特性。Gson通过反射创建新实例,导致单例失效;而kotlinx.serialization能正确识别单例对象并保持引用。Moshi则直接拒绝序列化object对象。使用单例对象时需注意序列化框架的选择,推荐优先使用kotlinx.serialization以避免单例被破坏。(150字)转载 2025-07-31 11:54:59 · 19 阅读 · 0 评论 -
Kotlin List 的使用 1:filter,map,count,first,last,any,find
本文介绍了Kotlin中List的常用高阶函数操作,包括filter(按条件过滤)、map(元素转换)、count(计数)、first/last(首尾元素)、any/all/none(条件判断)以及find/findLast(查找元素)。通过具体代码示例展示了每个函数的用法,如使用filter筛选正负数、map实现元素加倍、count统计偶数个数等。这些函数能简化集合操作,提升代码简洁性。文章适合Kotlin初学者快速掌握List的基础操作技巧。转载 2025-07-18 20:14:36 · 56 阅读 · 0 评论 -
Kotlin 中@IntDef 与@StringDef 枚举 注解
Kotlin/Java中的@IntDef和@StringDef注解用于创建类型安全的常量组。@IntDef适用于整型常量(如状态码),内存占用小;@StringDef适用于字符串常量(如颜色名称),可读性更强。两者都需配合@Retention(SOURCE)使用,提供编译时检查但无运行时保障。选择依据:数字型用@IntDef,字符串型用@StringDef,复杂逻辑用枚举类。这些注解在Android开发中能平衡类型安全与性能。转载 2025-07-09 14:31:13 · 65 阅读 · 0 评论 -
Parcelable 实现生成器
Parceler如果系统不能直接支持您的类型,您可以为其写一个Parceler映射对象。您可以使用或@WriteWith@Parcelize@Parcelize@Parcelize。转载 2025-06-11 21:44:42 · 64 阅读 · 0 评论 -
Kotlin中冷流(Clod Flow)和热流(Hot Flow)
冷流(ColdFlow)和热流(HotFlow)是数据流处理中的两种不同模式。冷流按需触发,只有在调用collect()时才开始生产数据,每个订阅者都会触发完整的数据流从头开始,适用于需要独立数据源的场景,如网络请求或数据库查询。热流则主动发射数据,不管是否有订阅者,多个订阅者共享同一份数据流,但只能收到订阅后的数据,适用于需要共享实时数据的场景,如IM消息或用户定位更新。冷流像点播电影,每个观众从头开始看;热流像直播,中途进入的观众只能从当前内容转载 2025-05-22 14:44:12 · 120 阅读 · 0 评论 -
Kotlin单例模式的几种写法
在Kotlin中实现单例模式非常简便,主要依赖于object关键字、伴生对象和by lazy委托。首先,使用object关键字可以直接定义一个单例类,Kotlin会自动确保其唯一性并在首次访问时初始化。其次,通过伴生对象(companion object)可以在已有类中实现单例,结合私有构造函数和静态方法getInstance()来管理实例。最后,by lazy委托提供了延迟初始化的能力,确保单例在首次访问时创建,并且是线程安全的。这三种方式分别适用于不同的场景,开发者可以根据需求选择最合适的实现方法。转载 2025-05-21 21:21:09 · 146 阅读 · 0 评论 -
Kotlin select使用方法介绍
select是Kotlin 1.6中的特性,即选择最快的结果。select与async、Channel结合使用,可以大大提高程序的响应速度,还可以提高程序的灵活性、扩展性。转载 2025-03-03 03:29:03 · 117 阅读 · 0 评论 -
理解 Kotlin 中的协程生命周期
协程是轻量级的线程,可以在不阻塞主线程的情况下执行异步任务。它们提供了一种编写非阻塞代码的方式,使代码易于阅读和维护。在 Kotlin 中,协程围绕 Job 的概念进行结构化。Job 是协程的句柄。它表示其生命周期,并允许你管理其执行,包括启动、取消和检查其状态。Job 提供了协程在其生命周期中可能处于的几种状态。转载 2024-12-26 01:22:06 · 259 阅读 · 0 评论 -
Kotlin 中的密封类:理解其目的、优势
密封类(Sealed Classes)在 Kotlin 是一种限制继承的类类型。请把它想象成一个会员制的社团。在 Kotlin 中,可以定义一个密封类,并且只有某些类型可以成为这个“社团”的一部分。转载 2024-12-26 01:19:29 · 288 阅读 · 0 评论 -
Kotlin cacheable - 缓存一切函数
仓库:https://github.com/zsqw123/kotlin-cacheable替代 by Lazy?用 Kotlin cacheable 缓存函数计算结果作者:zsqw123链接:https://juejin.cn/post/7359467530186883111来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。转载 2024-11-19 20:36:32 · 72 阅读 · 0 评论 -
Kotlin测试: MockK 高级功能
在过去的一年里,MockK 在 Kotlin 世界中迅速崛起。用户通过提交问题和建议改进,积极帮助改进它。在最近的几个月里,MockK 引入了许多强大的功能。本文将介绍这些新可能性,帮助你提升测试水平。MockK 提供了相当广泛的高级功能集,包括:分层模拟、协程、验证超时、验证确认和记录排除、可变参数、拓展和顶层函数、对象和枚举模拟、模拟返回Nothing、构造函数模拟、私有函数模拟、属性模拟、类模拟、配置和清理。Kotlin测试: MockK 高级功能。转载 2024-11-19 20:30:56 · 358 阅读 · 0 评论 -
深入了解 kotlinx-datetime:配置与使用指南
提供了一组核心类型,用于处理日期和时间:• Instant:表示UTC时间刻度中的一个瞬时点。• Clock:用于获取当前时刻的时钟接口。:表示不依赖于时区的日期和时间。:表示仅包含日期部分的组件。:表示仅包含时间部分的组件。• TimeZone:提供时区信息,用于在Instant和之间进行转换。:表示两个瞬时点之间的时间差,包含日期和时间组件。这些类型的设计使得处理各种日期和时间操作变得更加清晰且直观。是一款非常实用的多平台Kotlin库,专注于解决日常开发中常见的日期和时间问题。转载 2024-11-08 10:42:32 · 343 阅读 · 0 评论 -
Kotlin @Parcelize 配置方法
这个注解告诉Kotlin 编译器要自动生成android.os.Parcelable的writeToParcel(), describeContents() 等方法,还有生成一个构建器CREATOR。一定要注意的是,这个注解仅仅在直接或间接实现了android.os.Parcelable的类才能使用,并且原始的构造属性才会被序列化。原文链接:https://blog.csdn.net/qq_36113746/article/details/127651311。Kotlin 1.4.20 及以后。转载 2024-10-25 20:11:06 · 538 阅读 · 0 评论 -
Kotlin中如何实现串行和并行任务
在 Kotlin 中,async和await是用于并发编程的关键工具。它们通常用于协程中,以实现异步编程模式。通过使用async和await,你可以编写简洁的代码来处理并行任务,还可以控制任务的执行顺序来实现串行任务。转载 2024-10-17 11:14:38 · 246 阅读 · 0 评论 -
快速了解 Android KTX
Android 提供了各种 Kotlin 类和方法等来简化开发的代码。常见的 Android KTX 模块有core-ktxfragmentlifecycle等等,下面介绍最常用的一些扩展方法。转载 2024-10-16 15:27:46 · 482 阅读 · 0 评论 -
Kotlin通过委托实现接口默认方法
在实现一个有多个方法的接口时,需要把所有方法进行实现,即使不需要实现该方法,也需要空实现。链接:https://www.jianshu.com/p/bc7ef8136f84。商业转载请联系作者获得授权,非商业转载请注明出处。Kotlin提供了委托机制,可以将接口实现委托给方法进行实现。这里可以自由选择需要实现的方法,而不需要重写所有接口方法。实现也很简单,通过委托,在匿名类里面用动态代理生成了委托类。通过这种方式,可以极大减少没有必要实现的接口方法。,该类实现接口所有默认实现。转载 2024-10-11 20:07:21 · 146 阅读 · 0 评论 -
Kotlin 干掉接口需要强制实现的方法
我相信很多的人都和我一样写过上面的代码,代码的实现没有什么问题,也没有什么性能问题,就是源码读起来非常的蛋疼,我们其实只需要 ActivityLifecycleCallbacks 中的两个回调方法,其他的方法我们其实不需要,由于这是接口的定义,所以我们必须实现,但是方法中又是空的,什么都没有干,所以上面的代码的可阅读性就非常差,如果我们能够把 ActivityLifecycleCallbacks 所有的空实现方法就干掉就清爽了。哈哈,上面的代码是不是瞬间清爽了,上面的代码是通过。中的代理/委托实现的。转载 2024-10-07 11:04:55 · 445 阅读 · 0 评论 -
Kotlin中如何优雅地退出循环
在 Kotlin 中,forEach是一个高阶函数,它在遍历集合时会对集合中的每一个元素执行给定的 lambda 表达式。若要在forEach中退出循环,return会返回到外层函数,而不是终止循环。因此,使用不能达到预期的效果。合理的做法是使用带标签的return或者是使用其他循环结构,如for循环。在forEach中你可以使用自定义的标签配合return,以退出循环。例如:1、 使用for2、 使用标签和forEach在这个例子中,的形式创建了一个标签为loop的作用域,然后。转载 2024-09-27 13:38:43 · 467 阅读 · 0 评论 -
解锁 combine 在 Android 开发中的应用
Kotlin 中的combine操作符是一个功能强大的工具,可以将多个流组合成一个流。在 Android 开发中,尤其是在使用 Jetpack Compose 时,它可以极大地简化状态管理和数据处理。本文将探讨combine操作符的用法和优点,并通过示例展示其在 Android 开发中的应用。转载 2024-09-14 13:24:02 · 788 阅读 · 0 评论 -
经典实战之用Kotlin泛型实现键值对缓存
Kotlin 中的泛型是一种允许类型参数化的特性。它可以增强代码的重用性、类型安全性和可读性。在实际编写代码时,通过泛型,你可以编写更为通用的类和方法,而不必具体针对某种特定类型。转载 2024-09-11 10:16:22 · 153 阅读 · 0 评论 -
扩展Result,让你的代码更简洁
在这篇文章中,我们介绍了如何扩展Result,来处理不同的结果分支,使我们的代码更加简洁。这种处理异常分支的方式叫做轨道编程(Railway Programming)。在 Github 中,也有很多用 Kotlin 实现轨道编程的项目,比如说,它内部自己定义了Result,而不是使用的 Kotlin 的Result,本文的很多例子就是根据这个项目来改造的,有兴趣的可以看看。转载 2024-08-19 16:17:14 · 246 阅读 · 0 评论 -
Kotlin Flow中的3个数据相关的操作符:debounce、buffer和conflate
debounce操作符用于过滤频繁发射的数据项,只保留最后一个在指定时间内发射的数据项。常用于处理用户输入、按钮点击等可能频繁触发的事件,避免不必要的操作频繁发生。bufferbuffer和conflate都是用于处理流的性能优化操作符。buffer通过引入缓存区降低背压,让上下游可以并发运行。conflate则直接跳过中间值,只保留最新的,大幅度减少处理频率,适用于对最新数据更敏感的场景。转载 2024-08-19 11:01:44 · 379 阅读 · 0 评论 -
Kotlin Flow 如何使用callbackflow
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121840157本文出自。转载 2024-08-14 17:43:28 · 555 阅读 · 0 评论 -
Kotlin Flow应用举例,launchIn 和collect用法及区别
收到消息:初始消息 消息已存储到数据库:初始消息 收到消息:你好,世界!收到消息:这是一个新的消息 消息已存储到数据库:这是一个新的消息。launchIn 用于在协程作用域中启动一个新的协程来收集消息流。launchIn 可以用于启动多个协程来处理同一个消息流,而 collect 只能启动一个协程。collect 会在当前协程中收集消息流,而 launchIn 会在新的协程中收集消息流。如果需要在新的协程中收集消息流,可以使用 launchIn。新消息2:Message("这是一个新的消息")转载 2024-07-25 11:13:29 · 230 阅读 · 0 评论 -
彻底搞懂kotlin协程,全网唯一,手撸协程
线程,线程池,EventLoop,Future 是异步的基础,也是 Kotlin 协程的骨架。结构化并发设计,挂起与恢复机制,语言级的状态机是 Kotlin 协程的灵魂,在前面 5 篇我们分别从骨架讲到灵魂,然后本篇我们综合利用这些知识构建了一个自己的极简版协程,灵肉自此合一,相信在看完这几篇文章之后我可以说你已经彻底掌握了 Kotlin 协程。历时近两个月,到这里,这个协程系列的主要部份就已经讲完了。全网唯一,手撸Flow😄。下一篇我们从 Flow 基础开始。示例源码练习。转载 2024-07-17 16:17:06 · 402 阅读 · 0 评论 -
10种Kotlin锁同步技术
多线程编程在 Kotlin 中具有巨大的潜力,可以构建响应迅速、高效的应用程序。然而,随着并发能力的增强,同步访问共享资源以防止数据损坏和竞争条件的挑战也随之而来。在本文中,我们将深入探讨 Kotlin 中的同步世界,探索确保应用程序线程安全和健壮性的最佳实践和技术。同步是协调多个线程对共享资源的访问的过程,以保持数据完整性和一致性。在 Kotlin 中,当涉及到对可变状态(如共享变量、数据结构或关键代码段)的并发访问时,同步至关重要。转载 2024-05-27 19:57:18 · 524 阅读 · 0 评论 -
Kotlin 数据类生成多个构造函数
使用 @JvmOverloads 注解可以自动为 Kotlin 类的构造函数生成所有可能的参数组合的重载版本。这使得在 Java 中可以使用不同数量的参数来调用 Kotlin 构造函数,而无需显式地为每个参数组合编写单独的构造函数。Kotlin 的data class默认在编译后自动生成包含所有属性的构造方法,正常使用时会需要多个重载函数,可以使用@JvmOverloads 注解。@JvmOverloads 注解用于在 Kotlin 类的构造函数上生成多个重载版本,以便与 Java 代码更好地进行互操作。转载 2024-05-11 10:40:56 · 390 阅读 · 0 评论 -
Kotlin-13.数据类(data class)
官方文档: http://kotlinlang.org/docs/reference/data-classes.html2.copy函数3.componentN函数-解构声明(Destructuring Declarations)4.两个等号==和三个等号===简书:http://www.jianshu.com/p/cb807bf83e44CSDN博客: http://blog.csdn.net/qq_32115439/article/details/73611829转载 2024-05-09 11:21:05 · 1030 阅读 · 0 评论 -
Kotlin中data class构造函数的问题
无参构造函数不是我想要的,这里需要的是一个有两个long类型参数的构造函数,已经找到解决办法了。转载 2024-05-09 11:15:17 · 350 阅读 · 0 评论 -
Kotlin之密封类与枚举
不同点:枚举只能有一个实例,而密封类的子类可以有多个实例,密封类的子类可以携带自己独有的状态参数以及行为方法来记录更多的实现信息以完成更多的功能,这是。如下实例:密封类的所有成员都继承本类,但是允许个别成员拥有自己特殊属性如 EXCELLENT_MARKS。当某个成员需要特殊属性的时候,用枚举就比较难实现这个需求,密封类就是为了解决这个问题而出现的。如下实例:当我们想知道优秀学生的名字的时候,只用枚举去实现就不好实现。相同点:所有成员都属于本类本身。进行判断类型,跟枚举类相似。转载 2024-04-25 10:00:07 · 359 阅读 · 0 评论 -
Kotlin技巧:作用域函数let、run、with、apply和also
关于Kotlin的作用域函数:let、run、with、apply和also。它们有一个共同点:它们都在对象上调用,在这些函数的作用域内,可以访问对象本身,而无需其名称。转载 2024-04-24 17:39:36 · 307 阅读 · 0 评论 -
Kotlin技巧:Collection管理集合的常用函数
groupBy函数将一个集合分割成一个map,其中每个键代表一个独特的标准,对应的值是一个列表,列表中的元素匹配这个标准。记住,清晰和有效的排序不仅有助于数据组织,而且还增强了代码的整体可读性和维护性。使用sortBy和sortedBy,Kotlin提供了一种直观的方法来实现这一点,使你的集合保持有序和代码库清洁。尽管它们的功能相似,但根据上下文和你正在处理的集合的类型,他们的应用略有不同。在这个例子中,sortedBy采用一个选择器函数{it},它简单地返回每个元素,列表是根据字符串的自然顺序排序的。转载 2024-03-28 17:43:57 · 273 阅读 · 0 评论 -
Kotlin 技巧: 集合使用 filter 和 filterNot、map 和 flatMap 转换集合
无论你在处理列表、集合还是任何其他集合类型,Kotlin 都提供了两个强大的函数来简化此过程:filter 和 filterNot。当原始集合中的每个元素被转换为一个项目的集合,如果你希望将这些集合平坦化为一个单一列表时,flatMap 特别有用。filter 函数允许你指定一个条件,并返回一个新集合,其中只包含满足此条件的元素。map 函数对集合中的每个元素应用给定的转换,返回一个列表,包含这些转换的结果。这里,filterNot 排除满足条件的元素,收集列表中的奇数。lambda 表达式。转载 2024-03-26 20:06:14 · 782 阅读 · 0 评论 -
Kotlin 技巧:使用序列提高大数据处理性能
因此,它不仅效益低下,而且比必要的工作更多,通过在每一步都制作新的列表,使用了更多的内存。序列一次处理一个元素:它取第一个元素(1),检查它是否是奇数(是),将它平方(1),并检查结果是否大于 10(不是)。当它到达 5 时,通过奇数检查,平方得到 25,由于 25 大于 10,迭代停止。通过使用序列,当定义过滤奇数的操作或定义平方数字的映射操作时,不会有任何计算发生。使用序列,操作不会立即执行。通过使用序列的懒赋值,Kotlin 允许更有效的数据处理,尤其是在可能无需处理整个集合以得到结果的情况下。转载 2024-03-13 19:14:18 · 107 阅读 · 0 评论