Kotlin—日志的使用方法
都知道java中的@Slf4j使用得多么的舒服: @Slf4j public class TestController{ @GetMapping("/test") public String test…
Kotlin-1.5—内联值类
早在 kotlin 1.3 就已经有了 inline class 的alpha版本。到 1.4.30 进入 beta,如今在 1.5.0 中 终于迎来了 Stable 版本。早期的实验版本的 inli…
Kotlin—String的常用方法
Kotlin的String类中有非常多的方法,下面列举一些经常用到的方法,首先定义一个字符串变量,后面都以这个变量来验证String相关的方法。 //定义字符串 val str = "12345678…
Kotlin-协程<专>—协程原理
前言 协程(Coroutines),是 Kotlin 「最神奇」的特性,没有之一。 1. 线程 & 协程 很多主流编程语言都支持协程,比如:C#,Python,Lua,就连C++20…
Kotlin-协程(专)—Flow 篇(四十一)
Flow 就是 Kotlin 协程与响应式编程模型结合的产物,你会发现它与 RxJava 非常像,二者之间也有相互转换的 API,使用起来非常方便。 随着 RxJava 的流行,响应式编程模…
Kotlin-协程(专)—Select 篇(四十)
Select 并不是什么新鲜概念,我们在 IO 多路复用的时候就见过它,在 Java NIO 里面也见过它。接下来给各位介绍的是 Kotlin 协程的 Select。 复用多个 await 我们前面已…
Kotlin-协程(专)—Channel 篇(三十九)
Channel 实际上就是协程在生产消费者模型上的应用,把过去你用 BlockingQueue 实现的功能替换成 Channel,也许会有新的发现~ 1. Ch…
Kotlin-协程(专)—序列生成器(三十八)
Kotlin 1.1 协程还在吃奶的时候,Sequence 就已经正式推出了,然而,Sequence 生成器的实现居然有协程的功劳。 1. Sequence 懒序列 在 Kotlin 当中,Seque…
Kotlin-协程(专)—协程挂起(三十七)
协程的挂起最初是一个很神秘的东西,因为我们总是用线程的概念去思考,所以我们只能想到阻塞。不阻塞的挂起到底是怎么回事呢? 1. 先看看 delay 我们刚刚学线程的时候,最常见的模拟各种延时用的就是&n…
Kotlin-协程(专)—协程取消(三十六)
协程的任务的取消需要靠协程内部调用的协作支持,这就类似于我们线程中断以及对中断状态的响应一样。 1. 线程的中断 我们先从大家熟悉的话题讲起。线程有一个被废弃的 stop 方法,这…
Kotlin-协程(专)—异常处理(三十五)
1. 引子 在前面当中提到了这样一个例子: typealias Callback = (User) -> Unit fun getUser(callback: Callback){ ... } 我们通…
Kotlin-协程(专)—协程调度(三十四)
1、协程上下文 调度器本质上就是一个协程上下文的实现,我们先来介绍下上下文。 前面我们提到 launch 函数有三个参数,第一个参数叫 上下文,它的接口类型是 …
Kotlin-协程(专)—协程启动(三十三)
1.刚学 Thread 的时候 现在接触 Kotlin 的开发者绝大多数都有 Java 基础,我们刚开始学习 Thread 的时候,一定都是这样干的: val thread = o…
Kotlin-协程—协程进阶(三十二)
协程框架 如果是应用的话,主要掌握框架级别的使用即可,语言级别的支持api来源于标准库,写起来比较麻烦也非常难理解。 作用域 Scope是什么? 当launch, async或runBloc…
Kotlin-协程—协程初步(三十一)
协程 在说协程之前可以先讲讲进程和线程: 有一定基础的小伙伴们肯定都知道进程和线程。 进程是什么呢? 直白地讲,进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。 进…
Kotlin-注解—注解(三十)
一、注解的本质 注解实际上就是一种代码标签,它作用的对象是代码。它可以给特定的注解代码标注一些额外的信息。然而这些信息可以选择不同保留时期,比如源码期、编译期、运行期。然后在不同时期,可以通过某种方式…
Kotlin-反射—反射(二十九)
反射 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射…
Kotlin-泛型—泛型(二十八)
泛型 泛型,即 "参数化类型",将类型参数化,可以用在类,接口,方法上。 与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼。 定义泛型: class Data<…
Kotlin-类型进阶—内联类(二十七)
内联类 有时候,业务逻辑需要围绕某种类型创建包装器。然而,由于额外的堆内存分配问题,它会引入运行时的性能开销。此外,如果被包装的类型是原生类型,性能的损失是很糟糕的,因为原生类型通常在运行时就进行了大…
Kotlin-类型进阶—密封类(二十六)
密封类 密封(Sealed)类是一个限制类层次结构的类。 可以在类名之前使用sealed关键字将类声明为密封类。 它用于表示受限制的类层次结构。 当对象具有来自有限集的类型之一,但不能具有任何其他类型…
Kotlin-类型进阶—枚举类(二十五)
枚举类 枚举类最基本的用法是实现一个类型安全的枚举。 枚举常量用逗号分隔,每个枚举常量都是一个对象。 enum class Color{ RED,BLACK,BLUE,GREEN,WHITE } 每一…
Kotlin-类型进阶—数据类(二十四)
数据类 数据类是一个简单的类,用于保存数据/状态并包含标准功能(函数)。 data关键字用于将类声明为数据类。 data class User(val name: String, val a…
Kotlin-类型进阶—内部类(二十三)
内部类 在kotlin中类内部的class前面不写修饰符默认就是静态内部类,class前面写 inner修饰符才是java中的普通内部类,与java一样,普通内部类会持有外部类的对象引用。 class…
Kotlin-类型进阶—单例(二十二)
单例 单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 关键点: 一个类只有一个实例 , 这是最基本的它必须自行创建这个实例…
Kotlin-类型进阶—代理(二十一)
接口代理 interface Api { fun a() fun b() fun c() } class ApiImpl : Api { override fun a() {} override fu…
Kotlin-类型进阶—类属性的延迟初始化(二十)
延迟初始化 延迟初始化比较形象的是在java中有一个属性,没有赋值初始化,但是我可以在后面的代码中去初始化。 对于延迟初始化首先可以照搬java的代码,为属性设置 ?. 来使得属性可以为null,但是…
Kotlin-类型进阶—类与成员的可见性(十九)
可见性 与java不同,kotlin中啥也不写,默认就是public的,而java中不写默认是default包内可见kotlin中多一个限制可见性的internal关键字,去掉了default关键字对…
Kotlin-函数进阶—SAM转换(十八)
只有一个抽象方法的接口称为函数式接口或 SAM(单一抽象方法)接口。函数式接口可以有多个非抽象成员,但只能有一个抽象成员。 可以用 fun 修饰符在 Kotlin 中声明一个函数式接口。 fun in…
Kotlin-函数进阶—集合变换和序列(十七)
For 循环遍历 Kotlin for循环用于迭代程序的一部分几次。 它遍历数组,范围,集合或提供迭代的任何内容。 Kotlin for循环等同于C#等语言中的foreach循环。 Kotlin中fo…
Kotlin-函数进阶—内联函数(十六)
内联函数 内联函数使用关键字内联声明,内联函数的使用增强了高阶函数的性能。 内联函数告诉编译器将参数和函数复制到调用站点。 forEash 本身就是一个内联函数因为函数前面有inline,为我们创建了…