kotlin
文章平均质量分 95
渣渣→_→
这个作者很懒,什么都没留下…
展开
-
十一、kotlin的协程 - 缓存、volatile、内存屏障和cas(四) --- 跑题篇
在使用 的协程库中, 我们会看到很多的 协程调度器 , 如果添加上 函数的话, 我们会看到一些协程的背后还涉及了多线程, 只要有多线程就会存在多线程竞争共享变量的问题你会看到上面的代码使用了两个线程 和 协程用了三个 、 和 但协程 在不同的线程中我们现在分别在 和 间各自执行 次 判断下是否线程安全然后在 和 两个线程间各自执行 次 协程间:线程间:可以看的出来还是存在线程安全问题, 而且协程的线程安全问题还更加不可预知, 用多线程的话, 我们都知道, 它一定线程不安全, 但使原创 2022-07-12 22:07:35 · 1759 阅读 · 1 评论 -
十一、kotlin的协程(三)——热流channel
本质上是一个阻塞队列,只不过多了个可以挂起的函数罢了我们可以把 的 当作 , 但是 使用的是 挂起函数 的 代替 阻塞队列的 , 用挂起函数 代替阻塞队列的 这样 的优势就有了, 不会阻塞当前线程 是一个允许单向信息传递的数据结构, 从管道的写入端写入数据到管道的读取端读取数据, 这些都是串行的, 它的顺序是不变的前面我们知道 冷流 是 ,需要末端操作(可以看成是开关)才会开启 的函数发射元素过来而热流呢?则不需要 什么末端操作(开关),只要 就一定会将元素发送出去,至于 端是否读取,原创 2022-07-12 22:07:01 · 723 阅读 · 0 评论 -
十一、kotlin的协程(二)
挂起函数可以异步返回单个值, 但如果需要返回多个值怎么办? 此时便可以使用异步流以前没有异步流的情况下, 我们使用传统方式将会是下面这样:随着我们不断学习, 发现还有一种比较好用的方式达到异步返回的功能:对比下两种方式你会发现, 的方式是等半天一下子同时(几乎)打印, 而 的方式是一个一个一个的打印出来现在我们学习了 协程, 发现上面这段代码的 其实是阻塞了主线程, 这是不对的, 如果运行 这段代码的线程是 线程呢? 此时 将会在执行 而阻塞, 用户将会看到卡顿, 所以我们需要改造, 借助协原创 2022-07-12 22:06:21 · 772 阅读 · 0 评论 -
十一、kotlin的协程(一)
我觉得协程是一种开发人员可以自行决定代码在何处挂起、何处恢复的功能如果我就这么说你肯定会不满意!为什么?因为上面定义的是 类型的协程 ,是 的协程这种线程不支持真正的多线程对于 来说协程即满足了上面的挂起和恢复功能,还满足了 切线程在市面上, 协程的概念没有特别明细, 各个编程语言设计者都有自己的想法和思路, 虽然协程的实现细节可能不一样, 但大体分类还是能区分出来的有栈协程: 这种协程和线程一样, 有着自己的线程栈有栈协程可以在任意函数调用层任意的位置调度, 而无栈协程在这方面表现的力不从心,原创 2022-07-12 22:05:00 · 2561 阅读 · 0 评论 -
十、kotlin的注解和反射
theme: Chinese-red注解目标kotlin 一个属性包含了很多部分, 它主要由: 字段 + get/set 函数组成, 所以注解的标注需要指定具体标注的谁kotlin注解可以对上面几个位置进行标注 注解的是委托对象委托的是一个叫 的委托对象 注解的是接收者对扩展函数:反编译:对扩展操作符重载:反编译:对扩展属性:反编译: 目标注解主要功能就是将注解标注目标指向文件, 这样的话可以对文件注解前面学过的 改完直接指定了本 文件名为 , 到时候在其他j原创 2022-07-12 22:04:27 · 779 阅读 · 0 评论 -
九、kotlin的泛型
theme: Chinese-red我们需要将类型当作参数传递给对象, 传递的类型可能会被用于定义属性或者用于函数的泛型参数需要注意:泛型约束()主要内容很多时候我们需要将泛型的类型约束在某个界限, 比如: sum函数的泛型参数 和 参数 并不是什么类型都支持 这项操作, 所以我们需要对传入的类型参数(泛型)做限制, 像下面这样这样操作类似于 java 的 , 限定 必须继承 (或者说必须是的子类).对的, 这样做就不会出现传入俩 的 和 做加法运算符这样尴尬的事情 中的 是两原创 2022-06-27 11:17:37 · 1072 阅读 · 0 评论 -
八、kotlin的高阶函数
theme: Chinese-red一种以另一个函数为参数、返回值或两者兼顾的函数叫高阶函数整数类型, 可以存放整数, 字符串类型可以存放字符串, 而函数类型则可以存放函数引用上面 和 就是函数类型函数类型的参数名称看两个区别:(1) (2) 除了参数带上名字外, 其实本质上没有区别参数的名字只不过是为了代码的可读性实现一个简化版的 filter函数类型默认参数返回函数的函数根据某些条件判断返回不同的逻辑(函数引用 + 函数参数栈)lambda 的使用场景之一: 去除重复代码Sh原创 2022-06-27 11:17:03 · 740 阅读 · 0 评论 -
七、kotlin的运算符重载、约定和委托
如果我们定义了个 的操作符重载函数, 那么就可以在该类的实例上使用 运算符, 这就是 规定了很多这种规定, 但这些规定程序员都可以不需要知道, 只要依靠 的智能提示就行了定义一个成员的 操作符重载函数可以看出使用的是修饰符 定义一个操作符重载函数根据约定概念对应了运算符的 对应的可重载的函数还有:不会导致 的优先级低于 操作符左右两边的类型可以不一样需要注意: 操作符重载函数的左右两边顺序不可以调换, 上面定义的函数 类型为左, 类型为右, 所以 是不可以的, 如果需要则原创 2022-06-27 11:14:51 · 4095 阅读 · 0 评论 -
六、kotlin的函数式编程
答: 在中是一种用限定作用域, 以 区分参数和函数体的表达式, 叫 其本质是代码块, 你也可以理解成可调用的函数类型对象(但根据反编译发现其实不是, 它的实现方式有很多. 比如: 生成一个函数, 然后传递函数引用等等, 方式还挺多)其中 就是lambda表达式 和 表示 lambda函数对象调用 函数优点:缺点:代码可读性较差(用习惯了, 反而比较简单)使用 有些情况下需要注意 , 有时候没有, 但有些时候又有(这在后面有解释)最主要的用法用于参数传递, 一般是函数参数为 函数类型, 我们传递个原创 2022-06-27 11:14:08 · 762 阅读 · 0 评论 -
五、kotlin标准库函数
函数把当作参数传递给的参数, 然后返回的返回值返回新的值(函数类型参数带扩展) 函数(不是扩展函数) 函数第一个参数是传递接收者, 第二个参数传递的是 匿名扩展函数类型上面的代码我写了个匿名扩展函数变量, 可以代替 函数, 而且使用方式很像源码:的使用场景使用 对象本身数量有点多的时候, 可以考虑使用 我们还可以使用 , 它底层使用的还是 所以这样可以这样:它在返回的时候, 返回的是 String 类型 扩展函数 支持链式调用使用方法: 底层函数: 扩展函数如果原创 2022-06-27 11:13:23 · 798 阅读 · 0 评论 -
四、kotlin的可空性和基本数据类型
是一种可以为 的类型, 本质是下面这样:作用在不影响程序运行性能的前提下, 显示的帮助程序员避免空指针异常 在java中这样容易出现空指针异常在实际的java项目, 都需要 判断当然 之后出现的 , 但还是麻烦的, 不仅使代码变得冗长而且还存在性能问题使用 kotlin 重写这个函数前需要程序员主动判断该函数是否接受实参为空的情况, 如果需要支持的话,在上面代码中, 如果 为 的话, 则该函数直接返回 , 函数调用者 可以借助返回值 使用 判断是否为空如果实参一定不为原创 2022-06-27 11:12:55 · 562 阅读 · 0 评论 -
三、kotlin的类和对象(二)
theme: channing-cyan 沿用了 的单继承系统, 不允许 的多继承出现, 但允许 接口的多实现(1) 子类需要继承父类, 子类有责任负责父类字段的初始化(2) 子类最终都需要调用到父类的构造函数以初始化父类的字段, 子类构造函数如果要调用父类构造函数需要使用上 (3) 子类构造函数如果要调用到子类的其他构造函数则需要使用到 覆盖方法(重写方法)kotlin 所有的类、函数和字段默认都添加上了 如果我们需要重写这些功能,可以使用 覆盖属性在字段上: (字段可见性默认是原创 2022-06-27 11:12:08 · 816 阅读 · 0 评论 -
三、kotlin的类和对象(一)
var 和 val 定义一个可读可写的属性, 定义一个只读的属性 就相当调用了 函数, , 就相当于调用了 中所有的字段都需要初始化, 不像 那样字段有默认值 错误:需要显式初始化器,隐含默认 和 setter 类型 、生成 类型 、默认 错误: 需要在构造函数中初始化或者添加初始化值, 类型 、生成 给字段下面加上自定义的 和 幕后字段无限递归问题:error: 和 会调用 的 函数, 然后又遇到 再次调用 无限循环同理: 的 会调用 的 函数, 接着无限递归原创 2022-06-27 11:10:24 · 535 阅读 · 0 评论 -
二、kotlin的函数
自定义一个打印集合的方法命名参数(又叫具名参数) ★给参数配上了名字, 然后根据名字传递给相同名字的参数位置上反着传递参数配合默认参数值, 跳过默认参数只传递下一个参数给函数的参数添加默认值使用默认参数值之后, 可以这样调用这种函数我们可以选择省略掉默认参数值函数默认参数就是生成一个叫的函数, 在函数体内添加 一堆 if 语句赋值默认值他会生成这些函数而java中每个函数的默认参数值都被省略如果函数名存在关键字或者别的不能使用的特殊字符, 可以使用 反引号反引号函数还可以使用在, 只有 ko原创 2022-06-16 19:25:56 · 1000 阅读 · 0 评论 -
一、kotlin基础语法学习
java源码如下:kotlin编译器将文件加上 做成了 java 的类名, 而 是类的静态方法, 在 kotlin 中被称之为 java调用kotlin只需要如此:下面是java调用kotlin顶层函数的方式函数声明和定义kotlin使用 fun 关键字定义函数:普通函数体形式:kotlin中还有表达式函数体形式, 如下:什么是表达式?, , , 这些都是表达式还有 这三个也是表达式这里存在一个问题. 变量 为 , 如果不经过 语句, 则会在下面变成 直接报错如果我们使用原创 2022-06-16 19:24:44 · 842 阅读 · 0 评论