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<…
Mybatis—插入数据后返回自增主键ID
开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后返回的是插入成功的条…
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,为我们创建了…
Kotlin-函数进阶—高阶函数(十五)
高阶函数 高阶函数(高阶函数)是一个接受函数作为参数或返回函数或可以同时执行这两个函数的函数。 意味着,可以将函数作为参数传递给其他函数,而不是将Int,String或其他类型作为参数传递给函数。 在…
Kotlin-表达式—Lambda表达式(十四)
Kotlin 函数都是头等的,这意味着它们可以存储在变量与数据结构中、作为参数传递给其他高阶函数以及从其他高阶函数返回。可以像操作任何其他非函数值一样操作函数。 为促成这点,作为一门静态类型编程语言的…
Java—实现判断一个经纬度坐标是否在一个多边形内
创建一个实体类:Point public class Point { private Double x; private Double y; public Point (Double x , Doub…
Kotlin-表达式—运算符与中缀表达式(十三)
Kotlin 运算符重载 在Kotlin中使用operator时,将调用它的相应成员函数。 例如,表达式a + b在后台转换为a.plus(b)。 fun main(args: Array<St…
Kotlin-表达式—分支表达式(十二)
if 表达式 在Kotlin中,if表达式返回一个值。它用于控制程序结构的流程。 在Kotlin中有各种类型的if表达式。 if-else表达式if-else if-else阶梯表达式嵌套if表达式 …