Kotlin 协程与互操作
暂存问题协程,kotlin和java互操作,kotlin和js互操作。委托。泛型。(最后两个可以暂时不用考虑)互操网上再学习
协程使用指南:依赖、概念和用法
在使用协程前,必须引入相关的依赖包 1implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1") 协程(1)本质上,协程可以称为轻量级线程。而且协程只能在协程作用域内才能启动。有CoroutineScope,GlobalScope(全局)两种作用域。而且在全局作用域内启动的协程,只受整个应用的生命周期的限制。即只要整个应用程序还在运行中,只要协程的任务还未结束,该协程就可以一直运行 1234delay()//delay是一个挂起函数,他并不会阻塞线程,而是将协程挂起,在特定的时候再继续执行。thread.sleep()//而thread.sleep将会阻塞线程。 举例:当协程 A 调用 delay(1000L) 函数来指定延迟1秒后再运行时,协程 A 所在的线程只是会挂起,转而去执行协程 B,等到1秒后再把协程 A 加入到可调度队列里。 1234567891011121314//例程fun main() = runBlocking { ...
Kotlin 符号,高阶函数,内联函数,Lambda 表达式
特殊符号?表示 是否允许空值的存在!!表示 如果对象为null,那么系统一定会报异常!?:表示 对象A ?: 对象B 表达式,意思为,当对象 A值为 null 时,那么它就会返回后面的对象 B。::表示 Kotlin 中 双冒号操作符 表示把一个方法当做一个参数,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法。->表示 一般用于函数类型的连接符号===和==的区别 在Kotlin中,=== 表示比较对象地址,== 表示比较两个值大小。 高阶函数一个函数如果参数类型是函数或者返回值类型是函数,那么这就是一个高阶函数。 函数类型其实就是将函数的 “参数类型” 和 “返回值类型” 抽象出来例如: 1var add(a:Int,b:Int) =...
Kotlin集合操作符详解
继续学习 集合操作符在kotlin中,关于集合的操作符分为6种,分别是:总数擦欧总夫,过滤操作符,映射操作符,顺序操作符,生产操作符和元素操作符。 总数操作符太多内容,不一一列举,使用时可以再上网察看 1234567val a = listOf(1, "2", 43, true) println(a.any())//true println(a.any { it is Number })//true println(a.all { it is Int })//false println(a.count())//4 println(a.count { it is Number })//2 a.forEach { println(it)...
Kotlin 基础类型和集合
继续学习 元组(Tuple)有两种元组,Pair(a,b),Triple(a,b,c)他们属于简单类型,被赋值的元素可以通过次序来调用他们 1234var result = Triple(1,2,3) println(result) println(result.first) println(result.second) init对象内的初始化方法,当对象被创建时,便会调用该方法。每次创建都会调用init。 array和Listarray数组,它可以通过arrayOf()来创建。其中可以放不同种类的数据类型。数组是不可变的,他没有增加和删减的方法。如果需要改变数组的内容,可以让他重新赋值,通过plus来新增数据 1234var c = arrayOf(1,"滚犊子",4,5) c = c.plus(arrayOf(1,2,3,4)) println(c) ...
浏览器解析JSON数据受响应头影响
已知,很多浏览器会默认去解析从api获取到的json格式的数据。但是却无法解析成功。这是因为浏览器解析这个数据是需要判断返回值的headers的。例如:当我向后端发送请求时,如果response的header为Content-Type:text/plain。那么该浏览器便不会对他进行解析,而是默认为字符串。此时后端程序为 123456get("/api/sentence"){// call.response.headers.append("Content-Type", "application/json") val number = (0..1000).random() call.respond(JSONUtil.toJsonStr(readText?.get(number))) ...
Kotlin委托机制概述
kotlin委托机制就我目前遇到的问题时,该知识点并不需要我太关心,因此挂一个链接在这掘金
Kotlin和Java互操作限制与解决方案
正常情况下,kotlin做为优化后的java他们两是可以做到相互操作的。而且可以没有任何第三方库加持。而在某些时候会发现他们不能一起使用。会报以下错误 12345678Exception in thread "main" java.lang.NoClassDefFoundError: entity/SSchool at MainKt.test(Main.kt:19) at MainKt.main(Main.kt:16)Caused by: java.lang.ClassNotFoundException: entity.SSchool at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at...
Mock助力前端后端异步开发
ApiFox在使用apifox时,才深知mock的作用。简直不要太好用了呀。在没有mock的时候,前端和后端分开开发,必须要等后端把功能完善好了才可以获取到数据,而这往往会降低开发效率,前端必须等后端开发完才能开始开发(这里指的是那种依托后端数据的情况)。同时在后端开发后,往往需要API文档,前端才能够完成正确的开发。非常的耗时耗力。而这。也正是apifox解决的问题所在。 简单来说,mock就是用来模拟数据给前端去使用的。前端通过mock可以与后端实现异步开发。大大的提高效率,而且通过apifox不仅实现了前后端快速开发。而且使得api文档也可以快速生成。以上只是帮助理解mock的含义和概念,具体使用请查看apifox的官方文档 引用自掘金
Java序列化:实现对象传输
java对象为什么要实现Serialiable接口?Serializable是java.io包中定义的、用于实现Java类的序列化操作而提供的一个语义级别的接口。Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象。例如,我们可以将序列化对象写入文件后,再次从文件中读取它并反序列化成对象,也就是说,可以使用表示对象及其数据的类型信息和字节在内存中重新创建对象。 关键就是可以通过流的形式实现对象的传输。